如何在不使用 Boost 的情況下在 C 0x 中實現信號量?
Dec 18, 2024 pm 06:55 PM沒有信號量的 C 0x 中的同步
C 0x 引入了原子變量和條件,但缺乏顯式信號量支持。這引發了人們對如何在不使用 Boost 信號量實現的情況下有效同步執行緒的擔憂。
一種方法涉及利用互斥體和條件變數的組合來建立自訂訊號量。考慮以下範例:
#include <mutex> #include <condition_variable> class semaphore { std::mutex mutex_; std::condition_variable condition_; unsigned long count_ = 0; // Initialized as locked. public: void release() { std::lock_guard<decltype(mutex_)> lock(mutex_); ++count_; condition_.notify_one(); } void acquire() { std::unique_lock<decltype(mutex_)> lock(mutex_); while (!count_) // Handle spurious wake-ups. condition_.wait(lock); --count_; } bool try_acquire() { std::lock_guard<decltype(mutex_)> lock(mutex_); if (count_) { --count_; return true; } return false; } };
登入後複製
此實作利用互斥體 (mutex_) 來保護對內部資料的訪問,並在釋放信號量時使用條件變數 (condition_) 向等待執行緒發出訊號。 count_ 成員變數初始化為零,表示初始鎖定狀態。
要釋放信號量(即使其可用於獲取),release() 方法會增加計數並通知任何等待線程。要取得信號量,acquire() 方法將等待計數非零。 try_acquire() 方法嘗試非阻塞地取得信號量,如果成功則傳回 true,否則傳回 false。
這種方法提供了一種簡單而有效的方法來在 C 0x 中實現信號量,而無需使用 Boost。它的功能與 POSIX 信號量類似,允許線程同步其執行並有效地傳達事件。
以上是如何在不使用 Boost 的情況下在 C 0x 中實現信號量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)