⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvsimple.c

📁 linux下多线程程序设计,包括signals,mutex,simple_once
💻 C
字号:
/********************************************************
 * An example source module to accompany...
 *
 * "Using POSIX Threads: Programming with Pthreads"
 *     by Brad nichols, Dick Buttlar, Jackie Farrell
 *     O'Reilly & Associates, Inc.
 *
 ********************************************************
 *
 * cvsimple.c
 *
 * Demonstrates pthread cancellation.
 *
 */

#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS  3
#define TCOUNT 10
#define COUNT_THRES 12

int     count = 0;
int     thread_ids[3] = {0,1,2};
pthread_mutex_t count_lock=PTHREAD_MUTEX_INITIALIZER; 
pthread_cond_t count_hit_threshold=PTHREAD_COND_INITIALIZER; 

void *inc_count(void *idp)
{
	int i=0, save_state, save_type;
	int *my_id = idp;
	
	for (i=0; i<TCOUNT; i++) 
	{
		pthread_mutex_lock(&count_lock);
		count++;
		printf("inc_counter(): thread %d, count = %d, unlocking mutex\n", *my_id, count);
		if (count == COUNT_THRES) 
		{
			printf("inc_count(): Thread %d, count %d\n", *my_id, count);
			pthread_cond_signal(&count_hit_threshold);
		}
		pthread_mutex_unlock(&count_lock);
	}
	
	return(NULL);
}

void *watch_count(void *idp)
{
	int i=0, save_state, save_type;
	int *my_id = idp;
	
	printf("watch_count(): thread %d\n", *my_id);
	pthread_mutex_lock(&count_lock);
	while (count < COUNT_THRES) 
	{
		pthread_cond_wait(&count_hit_threshold, &count_lock);
		printf("watch_count(): thread %d, count %d\n", *my_id, count);
	}
	pthread_mutex_unlock(&count_lock);
	
	return(NULL);
}

extern int	main(void)
{
	int       i;
	pthread_t threads[3];
	
	
	pthread_create(&threads[0], NULL, inc_count, (void *)&thread_ids[0]);
	pthread_create(&threads[1], NULL, inc_count, (void *)&thread_ids[1]);
	pthread_create(&threads[2], NULL, watch_count, (void *)&thread_ids[2]);
	for (i = 0; i < NUM_THREADS; i++) 
		pthread_join(threads[i], NULL);
		
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -