以下是一个使用pthread_mutex来原子化一个增加操作的示例代码:
#include
#include
int count = 0;
pthread_mutex_t mutex;
void *increment(void *arg) {
pthread_mutex_lock(&mutex); // 加锁
count++;
printf("Thread %ld: count = %d\n", pthread_self(), count);
pthread_mutex_unlock(&mutex); // 解锁
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
pthread_create(&thread1, NULL, increment, NULL);
pthread_create(&thread2, NULL, increment, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
在这个示例中,我们定义了一个全局变量count
来表示一个计数器。我们使用pthread_mutex_t
类型的mutex
变量来创建一个互斥锁,用于保护count
变量的并发访问。
在increment
函数中,我们首先使用pthread_mutex_lock
函数来锁住互斥锁。这样,只有一个线程可以进入临界区。在临界区内,我们对count
变量进行递增操作,并打印线程ID和递增后的count
值。最后,我们使用pthread_mutex_unlock
函数来释放互斥锁,允许其他线程进入临界区。
在main
函数中,我们首先初始化互斥锁,然后创建两个线程thread1
和thread2
来执行increment
函数。最后,我们使用pthread_join
函数等待这两个线程的结束。最后,我们销毁互斥锁。
这样,我们就使用pthread_mutex
来原子化一个增加操作,确保count
变量在并发访问时的正确性。