[英]Horrible scalability of std::mutex with zero contention
即使沒有競爭, std::mutex的可擴展性似乎也很糟糕。 這是保證每個線程都使用自己的互斥鎖的情況。 到底是怎么回事? Windows 中的結果非常糟糕: Linux 輸得更大: 我也嘗試過使用 tbb 的讀者/作者鎖,甚至還推出了我自己的鎖。 ...
[英]Horrible scalability of std::mutex with zero contention
即使沒有競爭, std::mutex的可擴展性似乎也很糟糕。 這是保證每個線程都使用自己的互斥鎖的情況。 到底是怎么回事? Windows 中的結果非常糟糕: Linux 輸得更大: 我也嘗試過使用 tbb 的讀者/作者鎖,甚至還推出了我自己的鎖。 ...
[英]Why can mutex be used in different threads?
在多個線程中同時使用(寫入)相同的變量會導致未定義的行為和崩潰。 為什么使用互斥鎖,盡管事實上它們也是變量,但不會導致未定義的行為? 如果互斥鎖可以同時使用,為什么不讓所有變量同時工作而不加鎖呢? 我所有的研究都是在 Visual Studio 中按下Show definition on mute ...
[英]Destructor, when object's dynamic variable is locked by mutex will not free it?
我試圖一次解決一些復雜的(至少對我而言)異步場景,但我認為理解更簡單的情況會更好。 考慮一個 object,它分配了 memory,由變量攜帶: 如果同時使用detach ed 中的var變量,即異步線程,在另一個線程中這個 object 會被刪除怎么辦? var是否有可能不會在析構函數中被刪除 ...
[英]destroy std::mutex vs pthread_mutex_t
CPP 中的 std::mutex 和 pthread_mutex_t 有什么區別? 當按如下方式動態分配互斥鎖類型時,銷毀它們的正確方法是什么: pthread_mutex_t * mutex1 = new pthread_mutex_t(); std::mutex * mutex2 = ...
[英]Why is std::mutex so much worse than std::shared_mutex in Visual C++?
在發布模式下在 Visual Studio 2022 中運行以下命令: #include <chrono> #include <mutex> #include <shared_mutex> #include <iostream> std::mutex ...
[英]Why is std::mutex a standard-layout class?
[thread.mutex.class]/3 : 類互斥鎖滿足所有互斥鎖要求([thread.mutex.requirements])。 它是一個標准布局類 ([class.prop])。 這個要求的原因是什么? ...
[英]c++ mutexes that not blocks code from inside, but allow to block it from outside
我正在嘗試解決下一個問題: 有兩種類型的功能。 第一種類型可以同時從不同的線程執行(例如 - 從容器中讀取數據)。 第二個必須阻塞 first-type-function 中的所有線程,直到完成某些操作(例如 - 更改容器)。 我確信這是一項簡單的任務,但我找不到解決方案。 誰能幫幫我嗎? 這是一個 ...
[英]Why does introducing std::mutex to member class generate this compile error?
在下面的代碼中, class B包含成員 class class A的數組。 B::A有一個成員bool和一個成員std::thread 。 下面的代碼編譯得很好: 為什么向B::A引入 std::mutex 會引入以下編譯錯誤? 如果我正確理解編譯錯誤,它抱怨B::A的實例無法在沒有B::A: ...
[英]Why does libc++ allow recursive locking of std::mutex?
std::mutex是非遞歸的,違反它的是 UB。 所以理論上一切皆有可能(包括作為std::recursive_mutex工作)),但 libc++似乎工作正常,這個程序輸出再見 這是 libc++ 中的有意設計決定還是只是一些意外(例如,他們可以對互斥鎖和遞歸互斥鎖使用相同的邏輯)? li ...
[英]Is c++ singleton need memory barrier while using mutex?
我知道互斥鎖也可以從這里帶來 memory 屏障的效果: Can mutex replace memory barriers ,但我總是看到有一個 memory barrier using in c++ singleton barrier 如下所示,8839338802533 是不必要的嗎? ...
[英]Why is sizeof std::mutex == 40 when cache line size is often 64 bytes
在 static_assert 之后,gcc 和 clang 主干都通過了。 由於 x86 CPU 有 64 字節緩存線,我期望互斥鎖 sizeof 為 64,因此可以避免錯誤共享。 大小“僅”40 字節是否有原因? 注意:我知道大小也會影響性能,但程序中很少有大量互斥體,因此與錯誤共享的成本 ...
[英]Relative performance of std::atomic and std::mutex
我正在考慮為項目實施隊列的選項,其要求是生產者至少必須盡可能低延遲。 為此,我一直在研究使用std::atomic來控制生產者和消費者線程對數據結構的訪問的“無鎖”隊列。 我希望這可以避免std::mutex的開銷,特別是代碼當前使用的std::unique_lock 。 為此,我編寫了一個簡單的測 ...
[英]C++ Mutex locking for a set of threads
我理解互斥鎖的基本原理是保護特定的代碼路徑不被超過 1 個線程訪問。 在我當前的設置中,我有 10 個 A 型線程(A1-A10)和 10 個 B 型線程(B1-B10)。 我的意思是,運行無限循環並分別調用方法 A() 和 B() 的線程。 從這些方法 A 和 B 中,它們都調用了 functio ...
[英]HOW to solve "'mutex' in namespace 'std' does not name a type"?
我的 C++ 文件如下: 當我使用g++ -std=c++11 -msse2 -fPIC -O3 -ggdb -Wall -finline-functions -I./src -I./include -I/home/hbsun/nccl/ps-lite/deps/include -pthread ...
[英]Protecting for loop with std::mutex
我需要用 std::mutex 保護數據容器,它在 for 循環中使用,如下所示: 我可以想到幾種選擇,但它們像這樣丑陋: 有沒有好看的方法來實現這一目標? 我正在考慮類似以下(C++ 17)的內容,但這無法編譯。 :( 或者, ...
[英]C++ sync between two threads using a mutex without using conditional variable
我有一個線程需要阻塞,直到另一線程中發生問題為止。 聽起來很典型,我有這個解決方案。 這看起來在Linux上看起來很好,並且不需要條件var-除非C ++標准說在同一線程中兩次獲取鎖是未定義的行為-我在線程1中這樣做。 ...
[英]How is std::atomic_ref implemented for non-atomic types?
我想知道如何為非原子對象有效地實現std::atomic_ref (每個對象一個std::mutex ),因為以下屬性似乎很難強制執行: 通過 atomic_ref 應用於 object 的原子操作相對於通過引用相同 object 的任何其他 atomic_ref 應用的原子操作而言是原子操作。 ...
[英]Is it necessary to lock?
我在leetcode中遇到了一個問題。 我已經在討論中查看了一些解決方案。 但是我的解決方案與其他解決方案不同,因為我沒有first在方法中使用lock 。 我想知道我的代碼是否正確。 此外,您能給我一些有關我的代碼的建議嗎? 我認為沒有必要像void second(functio ...
[英]why use std::atomic if it still requires a mutex to work properly
閱讀std::condition_variable的文本我遇到了這句話: 即使共享變量是原子的,也必須在互斥鎖下進行修改,才能將修改正確發布到等待線程。 我的問題是這樣的: 如果不是“與 POD 一起工作的無鎖代碼”,原子有什么用? 更新 看起來我的問題有些混亂:( 引用文本中的“共 ...
[英]Why does a redundant extra scoping block affect std::lock_guard behaviour?
此代碼演示了兩個線程之間共享互斥鎖,但圍繞thread_mutex的范圍塊進行了一些奇怪的事情。 (我在另一個問題中有這個代碼的變體,但這似乎是第二個謎。) 這基本上可以正常工作,但理論上理論上不需要圍繞thread_lock的作用域。 但是,如果你評論出來...... ...