Linux多线程服务端编程(muduo):互斥锁(mutex)的使用原则

单独使用互斥锁时,可以遵循一些原则:

(1)用RAII手法(资源获取时就是初始化,在构造函数中创建对象,在析构函数中销毁对象)封装mutex的创建,销毁,加锁,解锁。

(2)只用非递归的mutex(即不可重入的mutex,当一个线程已获得锁时,其他线程阻塞的时候,不允许该线程获得锁两次。)

(3)不手工调用lock()和unlock()函数,一切交给栈上的Guard对象的构造函数和析构函数负责。

(4)在每次构造Guard对象时,思考一路上(调用栈上)已经持有的锁,防止因加锁顺序不同而导致死锁。

次要原则:

1,不适用跨进程的mutex,进程间通信只用TCP sockets

2,加锁,解锁在同一个线程。线程a不能去unlock线程b已经锁住的mutex。(RAII自动保证)

3,别忘了解锁(RAII自动保证)

4, 不重复解锁(RAII自动保证)

5,必要的时候可以考虑用PTHREAD_MUTEX_ERRORCHECK来排错。

猜你喜欢

转载自blog.csdn.net/ypshowm/article/details/89352543
今日推荐