📄 cvsimple.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 + -