ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux线程同步简单示例

2022-09-06 04:00:08  阅读:203  来源: 互联网

标签:示例 int void linux mutex pthread 线程 get cond


#include<stdio.h> #include<pthread.h> #include<stdlib.h> //int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); //int pthread_join(pthread_t thread, void **retval); //void pthread_exit(void *retval); //函数模型 int get_data = 0; pthread_mutex_t mutex;//定义锁 pthread_cond_t cond;//定义控制信号 void *func1(void *arg) {
    while(1)     {         pthread_cond_wait(&cond,&mutex);//等待在mutex这把锁上的信号到来才能解除阻塞,否则一直阻塞下去         sleep(1);         printf("get_data =%d\n",get_data);         printf("t1  run================\n");         get_data = 0;         sleep(1);     } //  pthread_exit(); } void *func2(void *arg)//指针的函数 返回指针 {     pthread_mutex_lock(&mutex);//加锁     while(1)     {     sleep(1);     printf("t2 get_data = %d\n",get_data);     get_data++;         if(get_data == 3)     {//全局变量到3发送信号func1执行     pthread_cond_signal(&cond);     pthread_mutex_unlock(&mutex);//解锁     sleep(1);//睡一秒让出cpu时间片不让t2线程抢到执行权     }       }     } void *func3(void *arg) { //  pthread_mutex_lock(&mutex); //  pthread_mutex_unlock(&mutex); //  pthread_exit(); }
int main() {     int ret1 = 0;     int ret2 = 0;     int ret3 = 0;     int param = 100;     pthread_t t1;//定义线程变量     pthread_t t2;     pthread_t t3;     pthread_cond_init(&cond,NULL);//初始化信号     pthread_mutex_init(&mutex,NULL);//初始化锁     ret1 = pthread_create(&t1,NULL,func1,(void*)&param);//创建线程     if(ret1  == 0)     { //      printf("main create to t1 success\n");     }     ret2 = pthread_create(&t2,NULL,func2,(void*)&param);         if(ret2  == 0)         { //              printf("main create to t2 success\n");         }         ret3 = pthread_create(&t3,NULL,func3,(void*)&param);         if(ret3  == 0)         { //              printf("main create to t3 success\n");         }
//  printf("main %ld\n",(unsigned long)pthread_self());     pthread_join(t1,NULL);//主函数线程执行完等这些创建的线程执行完才能退出     pthread_join(t2,NULL);//不设置的可能会导致主线程执行完释放,其他线程无法正常执行     pthread_join(t3,NULL);     pthread_mutex_destroy(&mutex);//销毁锁     pthread_cond_destroy(&cond);//销毁信号     return 0; }

标签:示例,int,void,linux,mutex,pthread,线程,get,cond
来源: https://www.cnblogs.com/ightningmcqueen/p/16660324.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有