如何实现if语句中几个线程的同步
发布网友
发布时间:2022-04-30 23:54
我来回答
共1个回答
热心网友
时间:2022-06-20 20:53
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。
2、例程:
#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h>#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number=0, i;void *thread1(){printf ("thread1 : I'm thread 1\n");for (i = 0; i < MAX; i++){printf("thread1 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(2);}printf("thread1 :主函数在等我完成任务吗?\n");pthread_exit(NULL);}void *thread2(){printf("thread2 : I'm thread 2\n");for (i = 0; i < MAX; i++){printf("thread2 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(3);}printf("thread2 :主函数在等我完成任务吗?\n");pthread_exit(NULL);}void thread_create(void){int temp;memset(&thread, 0, sizeof(thread)); //comment1/*创建线程*/if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2printf("线程1创建失败!\n");elseprintf("线程1被创建\n");if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3printf("线程2创建失败");elseprintf("线程2被创建\n");}void thread_wait(void){/*等待线程结束*/if(thread[0] !=0) { //comment4pthread_join(thread[0],NULL);printf("线程1已经结束\n");}if(thread[1] !=0) { //comment5pthread_join(thread[1],NULL);printf("线程2已经结束\n");}}int main(){/*用默认属性初始化互斥锁*/pthread_mutex_init(&mut,NULL);printf("我是主函数哦,我正在创建线程,呵呵\n");thread_create();printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");thread_wait();return 0;}