1、概念:
引入互斥(mutual exclusion)锁的目的是用来保证共享数据操作的完整性。
互斥锁主要用来保护==临界资源==
每个临界资源都由一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源
线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到
2、互斥锁使用:
* 初始化 pthread_mutex_init
* 加锁: pthread_mutex_lock
* 解锁: pthread_mutex_unlock
获得锁为止。
代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
int value = 0;
int count1, count2;
pthread_mutex_t mutex;
void *thread_func1(void *arg)
{
while (1)
{
value++;
pthread_mutex_lock(&mutex); //加锁
count1 = valuea;
count2 = value;
pthread_mutex_unlock(&mutex); //解锁
}
}
void *thread_func2(void *arg)
{
while (1)
{
pthread_mutex_lock(&mutex);
if (count1 != count2)
printf("count = %d, count2 = %d\n", count1, count2);
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, char *argv[])
{
pthread_t thread1, thread2;
int err;
//初始化互斥锁
pthread_mutex_init(&mutex, NULL);
err = pthread_create(&thread1, NULL, thread_func1, NULL);
if (err != 0)
{
fprintf(stderr, "pthread_create1: %s\n", strerror(err));
return -1;
}
err = pthread_create(&thread2, NULL, thread_func2, NULL);
if (err != 0)
{
fprintf(stderr, "pthread_create2: %s\n", strerror(err));
return -1;
}
while (1)
sleep(1);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。