草庐IT

stdmutex

全部标签

c++ - 使用 std::mutex 释放和获取

这是一个关于C++标准的问题。我只能访问标准草案,所以如果这与官方标准不同,我深表歉意。另外,如果我误解了它的工作原理,请随时纠正我。假设我有两个线程,一个写入字符串,一个复制该字符串的内容。我使用std::mutexmyMutex;保护对它们的访问我知道您通常应该将RAII类用于锁,我只是明确地使用了锁定和解锁以使示例更加明确。//Globalvariablestd::stringmessage;std::mutexmyMutex;//ThreadonemyMutex.lock();message="Hello";myMutex.unlock();//ThreadtwomyMutex

c++ - `std::lock_guard<std::mutex>` 对象没有名称时的不同行为

我正在了解std::mutex,std::thread我对下面两段代码的不同行为感到惊讶:#include#include#includeusingnamespacestd;std::mutexmtx;voidfoo(intk){std::lock_guardlg{mtx};for(inti=0;i输出是顺序的。但是如果我不命名变量std::lock_guard,输出是无序的voidfoo(intk){std::lock_guard{mtx};//justerasethenameofvariablefor(inti=0;i好像std::lock_guard在第二种情况下没有用,为什么?

c++ - 为什么使用 std::mutex 的函数会对 pthread_key_create 的地址进行空检查?

采用这个简单的函数,在由std::mutex实现的锁下递增整数:#includestd::mutexm;voidinc(int&i){std::unique_locklock(m);i++;}我希望这(在内联之后)以一种直接的方式编译为调用m.lock()增量i然后m.unlock().检查为最新版本的gcc和clang生成的程序集,但是,我们发现了一个额外的复杂问题。先拿gcc版本:inc(int&):moveax,OFFSETFLAT:__gthrw___pthread_key_create(unsignedint*,void(*)(void*))testrax,raxje.L2p