cpp中加锁问题

发布时间 2023-11-24 21:31:53作者: dustemoff

std::mutex 

mutex 类是一个同步原语,可用于保护共享数据不被多个线程同时访问。
互斥体提供独占的、非递归的所有权语义:
调用线程从成功调用lock或try_lock直到调用unlock为止都拥有互斥体。
当一个线程拥有互斥锁时,如果所有其他线程尝试声明该互斥锁的所有权,则所有其他线程都将阻塞(对于 lock 调用)或收到错误的返回值(对于 try_lock)。
在调用 lock 或 try_lock 之前,调用线程不得拥有互斥体。
如果互斥锁在仍由任何线程拥有时被销毁,或者线程在拥有互斥锁时终止,则程序的行为是未定义的。 mutex 类满足 Mutex 和 StandardLayoutType 的所有要求。
std::mutex 既不可复制也不可移动。

std::muetx::lock

锁定互斥体。如果另一个线程已经锁定了互斥体,则对 lock 的调用将阻塞执行,直到获取锁为止。
如果lock由已经拥有互斥锁的线程调用,则行为是未定义的:例如,程序可能会死锁。鼓励可以检测无效使用的实现抛出带有错误条件resource_deadlock_would_occur的std::system_error而不是死锁。
同一互斥锁上的先前的 unlock() 操作与此操作同步(如 std::memory_order 中所定义)。

 

 运行这段代码,编译器不会报错,但是不建议这种行为。