Linux多线程C++工具库:liblmp_tool采用RAII手法封装Mutex
发布时间
阅读量:
阅读量
基于该系统的高性能多内核进程管理工具包 liblmp_tool github: https://github.com/Dwyane05/liblmp_tool
互斥锁(mutex)大概是应用最广泛的同步机制之一,在多数多线程系统中都可以见到它的身影。它通过守护着一个临界区区域来实现资源的互斥使用,在任何时刻只有一个线程能占用它所定义的临界区区域。当单独应用mutex时,则主要目的是确保数据的一致性与安全性。
我认为自己的原则应该是:采用RAII模式来实现mutex的生命周期管理。这种做法通常被视为最佳实践,在C++编程中这是标准做法。
仅限于非递归型互斥锁(即nonreentrant mutex)。
无需手动操作lock()与unlock()函数,这些操作将完全由栈上Guard对象的构造与析构函数自主管理。
Guard对象的生命周期正好等于该分析对象所对应的临界区(分析对象何时析构是C++程序员的基本功)。
在每次生成Guard对象的过程中,审视调用栈中的已有锁定机制,以避免因锁定顺序的不同而产生死锁现象(deadlock)
次要原则包括:
· 不建议使用跨进程的mutex。
· 进程间的通信仅通过TCP sockets实现。
· 加锁与解锁操作必须在同一线程内。
· 线程a不应试图unlock已由线程b所持有的mutex(RAII机制自动生成保护)。
全部评论 (0)
还没有任何评论哟~
