#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_mutex_t mutex;
int sum = 0;
typedef struct FuncArg
{
int start;
int end;
}FuncArg;
void *thread_handler(void *arg)
{
int start = ((FuncArg*)arg)->start + 1;
int end = ((FuncArg*)arg)->end;
for(;start <= end; ++start)
{
pthread_mutex_lock(&mutex); //申请锁
sum += start; //临界区操作
pthread_mutex_unlock(&mutex); //释放锁
}
return 0;
}
int main(int argc,char* argv[])
{
pthread_t thids[4];
FuncArg arg[4];
pthread_mutex_init(&mutex,NULL); //初始化互斥锁
int len = 10000/4;
for(int i = 0;i < 4;++i)
{
arg[i].start = len*i;
arg[i].end = len*( i + 1);
pthread_create(&thids[i],NULL,thread_handler,&arg[i]);
}
for(int i = 0;i < 4;++i)
{
int *ret;
pthread_join(thids[i],(void**)&ret);
}
pthread_mutex_destroy(&mutex);
printf("sum = %d\n",sum);
return EXIT_SUCCESS;
}
Linux环境互斥锁
最新推荐文章于 2024-07-21 22:06:29 发布