linux系统-锁

linux中提供了互斥锁(mutex,互斥量)。每个线程在对资源进行操作前都会尝试先加锁,成功加锁才能操作,操作结束解锁。资源还是共享的,线程间也还存在竞争。但通过”锁”可以将资源的访问变成互斥操作,而后与时间有关的错误也将不会再产生。

应该注意:同一时刻,只能有一个线程持有该锁

当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B会阻塞。C线程不加锁而直接访问该全局变量,此时依然能够访问,但会出现数据混乱。

互斥锁实质上是操作系统提供的一把建议锁(又称”协同锁”),当程序中有多线程访问共享资源的时候需要使用该机制。但是没有强制的限定

借助互斥锁管理共享数据实现同步

C关键词restrict用来限定指针变量,被该关键字限定的指针变量所指向的内存操作必须由本指针完成

1
2
3
4
5
pthread_mutex_t lock; //创建锁
pthread_mutex_init; //初始化
pthread_mutex_lock; //加锁
访问共享数据(stdout)
pthread_mutex_unlock(); //解锁