recursive-mutex

    4熱度

    1回答

    我有一個案例,我的算法的決定是基於共享的深度std::recursive_mutex。 #include <iostream> #include <mutex> #include <thread> int g_i = 0; std::recursive_mutex g_i_mutex; void bar() { std::lock_guard<std::recursive_

    1熱度

    1回答

    我在http://preshing.com/20120305/implementing-a-recursive-mutex以及http://en.wikipedia.org/wiki/Reentrant_mutex上閱讀了兩篇關於遞歸(可重入)互斥體的文章,但這兩篇文章都沒有任何意義。 有人可以解釋遞歸(可重入)互斥鎖的工作原理嗎? (我發現很少的材料解釋互斥如何遞歸的作品。如果任何人有很好的解釋

    4熱度

    2回答

    我正在學校實驗室工作,我們被指示爲計數程序創建一個遞歸互斥鎖。我寫了一些代碼(這不起作用),但我認爲這主要是因爲我不明白使用遞歸互斥鎖的真正想法。任何人都可以詳細說明遞歸互斥鎖應該做什麼/看起來像什麼? 一般注意:我沒有要求答案,只是一些關於遞歸互斥鎖應該做什麼的澄清。 此外,如果任何人都好奇,這裏是所需的代碼。我正在編輯/執行的代碼是recmutex.c。 recmutex.h #include

    2熱度

    1回答

    我可以創建並使用只有一個互斥鎖屬性來初始化多個遞歸互斥鎖嗎?或者我必須爲每個我想創建的互斥體創建一個互斥屬性? 基本上我下面的代碼是正確的? int err; int bufferLength = 10; pthread_mutexattr_t recursiveAttr; pthread_mutex_t mutexes[bufferLength]; for(int index = 0;

    12熱度

    2回答

    你能與std::condition_variable結合std::recursive_mutex,意義做這樣的事情: std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex) some_condition_var.wait(lock); 如果它不允許的,那麼爲什麼不呢? 我正在使用VC++ 11。

    2熱度

    1回答

    我有一個類打開事務,將操作添加到隊列中,然後關閉事務。在open-> close生命週期中,我想要使用遞歸互斥鎖,以便只有一個線程可以隨時打開一個事務。所有其他線程都會被阻塞,直到當前事務結束。 class MyObject { void beginTransaction() { // acquire mutex } void endTrans

    1熱度

    2回答

    我讀的書「C++併發在行動」,並有關於在上市6.1使用的互斥體的一些問題,代碼片段如下: void pop(T& value) { std::lock_guard<std::mutex> lock(m); if(data.empty()) throw empty_stack(); value=std::move(data.top()); data.pop(

    2熱度

    4回答

    我在我的程序中遇到了死鎖問題。所以我一直在閱讀關於鎖的問題,但問題是大多數信息不一致或者沒有定義平臺。在Recursive Lock (Mutex) vs Non-Recursive Lock (Mutex)最接受的回答說: 由於遞歸互斥有主人翁意識,在線程 抓住互斥必須是釋放互斥鎖在同一個線程。在 非遞歸互斥體的情況下,沒有所有權意識,任何線程通常都可以釋放該互斥體,無論哪個線程本來是 接受互斥

    0熱度

    2回答

    根據POSIX,我可以靜態初始化一個互斥這樣: pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; 不過,如果我想要的互斥是遞歸的?互斥量是非遞歸的默認值,並且無法爲靜態初始化提供互斥屬性。

    2熱度

    1回答

    [thread.mutex.recursive]引用: 擁有一個recursive_mutex對象可以通過調用該對象上lock()或try_lock()獲取所有權的附加級別的線程。沒有說明單個線程可以獲得多少所有權級別。如果線程已獲得recursive_mutex對象的最大所有權級別,則對try_lock()的其他調用將失敗,對lock()的額外調用將​​拋出類型爲system_error的異常。