目录
线程同步是为了对共享资源的访问进行保护,目的是为了解决数据一致性的问题。
出现数据一致性问题本质在于进程中的多个线程对共享资源的并发访问(同时访问)。
为确保不会出现对共享资源的并发访问,Linux系统提供了多种实现线程同步的机制,常见的有互斥锁、条件变量、自旋锁以及读写锁等。
互斥锁(mutex)又叫做互斥量,在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁。对互斥锁进行上锁之后,任何其它试图再次对互斥锁进行加锁的线程都会被阻 塞,直到当前线程释放互斥锁。如果释放互斥锁时有一个以上的线程阻塞,那么这些阻塞的线程会被唤醒, 它们都会尝试对互斥锁进行加锁,当有一个线程成功对互斥锁上锁之后,其它线程就不能再次上锁了,只能 再次陷入阻塞,等待下一次解锁。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
static pthread_mutex_t mutex;
static int g_count = 0;
static void *