锁
linux中提供了互斥锁(mutex
,互斥量)。每个线程在对资源进行操作前都会尝试先加锁,成功加锁才能操作,操作结束解锁。资源还是共享的,线程间也还存在竞争。但通过”锁”可以将资源的访问变成互斥操作,而后与时间有关的错误也将不会再产生。
应该注意:同一时刻,只能有一个线程持有该锁。
当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B会阻塞。C线程不加锁而直接访问该全局变量,此时依然能够访问,但会出现数据混乱。
互斥锁实质上是操作系统提供的一把建议锁(又称”协同锁”),当程序中有多线程访问共享资源的时候需要使用该机制。但是没有强制的限定。
借助互斥锁管理共享数据实现同步
C
关键词restrict
用来限定指针变量,被该关键字限定的指针变量所指向的内存操作必须由本指针完成。
1 | pthread_mutex_t lock; //创建锁 |