1. 为什么不要直接使用 lock/unlock

C++ 中提供了多种同步机制来解决多线程之间的数据竞争问题,其中 lock/unlock 机制是最基本的同步机制,它可以用来保护一个特定的共享资源,但是它的使用存在一些问题,所以 C++ 不建议直接使用 lock/unlock 机制来解决多线程之间的数据竞争问题。

2. lock/unlock 存在的问题

(1)首先,使用 lock/unlock 机制可能会导致死锁的发生,即多个线程互相等待对方释放锁,从而导致线程永远处于等待状态,从而影响程序的性能和正确性。

(2)其次,使用 lock/unlock 机制可能会导致程序出现异常,因为程序可能会忘记释放锁,从而导致其他线程无法访问共享资源,从而影响程序的正确性。

3. C++ 提供的替代方案

针对 lock/unlock 机制存在的问题,C++ 提供了多种替代方案,比如 mutex、condition variable、atomic operation 等,这些方案可以有效的避免死锁和异常的发生,更加安全和高效。