pthread_mutex_lock与pthread_mutex_unlock用来保证在某一线程在某段时间可以独占cpu,下面的例子打印的val值和实际的val值相同,但若不加锁,则打印的val=3,而逻辑上val=1。
//mutex.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/sysinfo.h>
#include <sched.h>
#include <ctype.h>
#include <fcntl.h>
pthread_mutex_t mutex;
int val = 0;
void *ThreadFunc1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex); /*获取互斥锁*/
val = 1;
if(val == 1)
{
sleep(2);//这里用sleep模拟程序中的其他操作
printf("val = %d,and theoretically val = 1\n",val);//此刻val可能已经被其他线程修改
}
pthread_mutex_unlock(&mutex); /*释放互斥锁*/
}
return 0;
}
void *ThreadFunc2(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex); /*获取互斥锁*/
val = 3;
pthread_mutex_unlock(&mutex); /*释放互斥锁*/
//usleep(1000);
}
return 0;
}
int main()
{
void *ResVal;
pthread_mutex_init (&mutex, NULL); /*定义*/
pthread_t thread1 , thread2;
pthread_create(&thread1 , NULL , ThreadFunc1 , NULL);
pthread_create(&thread2 , NULL , ThreadFunc2 , NULL);
pthread_join(thread1 , &ResVal);
pthread_join(thread2 , &ResVal);
}