- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12-13线程全解
#include pthread.h #include stdio.h #include stdlib.h pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/ pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/ void *thread1(void *); void *thread2(void *); int i=1; int main(void) { pthread_t t_a; pthread_t t_b; pthread_create(t_a,NULL,thread2,(void *)NULL);/*创建线程 t_a*/ pthread_create(t_b,NULL,thread1,(void *)NULL); /*创建线程 t_b*/ pthread_join(t_b, NULL);/*等待线程 t_b 结束*/ pthread_mutex_destroy(mutex); pthread_cond_destroy(cond); exit(0); } void *thread1(void *junk) { for(i=1;i=9;i++) { pthread_mutex_lock(mutex);/*锁住互斥量*/ if(i%3==0) pthread_cond_signal(cond);/*条件改变,发送信号,通知 t_b 线程*/ else printf(thead1:%d\n,i); pthread_mutex_unlock(mutex);/*解锁互斥量*/ sleep(1); } } void *thread2(void *junk) { while(i9) { pthread_mutex_lock(mutex); printf(the %d enter while\n,i); if(i%3!=0) pthread_cond_wait(cond,mutex);/*等待*/ printf(thread2:%d\n,i); pthread_mutex_unlock(mutex); sleep(1); } } 条件变量,互斥锁典型应用 #include pthread.h #include unistd.h #include stdio.h #include stdlib.h static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; struct node { int n_number; struct node *n_next; } *head = NULL; static void cleanup_handler(void *arg) { printf(Cleanup handler of second thread.\n); free(arg); (void)pthread_mutex_unlock(mtx); } static void *thread_func(void *arg) { struct node *p = NULL; pthread_cleanup_push(cleanup_handler, p); while (1) { pthread_mutex_lock(mtx);//保证pthread_cond_wait的并发性 while (head == NULL) { pthread_cond_wait(cond, mtx);
文档评论(0)