什么是线程互斥?
初始化互斥锁:
int pthread_mutex_init(pthread_mutex_t * restrict mutex, const pthread_mutexattr_t * restrict attr);
获取互斥锁:
int pthread_mutex_lock(pthread_mutex_t * mutex);
释放互斥锁:
int pthread_mutex_unlock(pthread_mutex_t * mutex);
多人垒墙实例:
#include <pthread.h>
#include <stdio.h>
pthread_t thread[2];
int number = 0;
pthread_mutex_t mut;//互斥锁
void* work1()
{
int i = 0;
printf("i am work1\n");
for(i=0; i<10; i++)
{
pthread_mutex_lock(&mut);//加锁
number++;
pthread_mutex_unlock(&mut);//解锁
printf("work1 number is %d\n", number);
sleep(1);
}
pthread_exit(NULL);
}
void* work2()
{
int i = 0;
printf("i am work2\n");
for(i=0; i<10; i++)
{
pthread_mutex_lock(&mut);//加锁
number++;
pthread_mutex_unlock(&mut);//解锁
printf("work2 number is %d\n", number);
sleep(1);
}
pthread_exit(NULL);
}
int main()
{
pthread_mutex_init(&mut, NULL);//初始化锁
//创建工人1线程
pthread_create(&thread[0], NULL, work1, NULL);
//创建工人2线程
pthread_create(&thread[1], NULL, work2, NULL);
//等待工人1线程的结束
pthread_join(thread[0], NULL);
//等待工人2线程的结束
pthread_join(thread[1], NULL);
return 0;
}
运行结果:
扫描二维码关注公众号,回复:
5409334 查看本文章