簡體   English   中英

我可以使用 C++20 `std::atomic<t> ::wait()` 或 `std::atomic_flag::wait()` 在共享 memory 中?</t>

[英]Can I use C++20 `std::atomic<T>::wait()` or `std::atomic_flag::wait()` in shared memory?

我的項目涉及一個插件,以及一個用於所述插件的 GUI,該插件被隔離到一個單獨的進程中。 我分享的數據可能會被 GUI 更新,當它更新時,它應該由插件處理。

為此,我正在考慮將其放入我的共享內存塊中:

std::atomic_bool event_flag;
// insert mutex...
some_data_struct data;

本質上,當 GUI 想要更改數據時,它會執行以下操作:

// acquire mutex

// write data...

// release mutex

event_flag = true;
event_flag.notify_one();

然后插件執行以下操作:

event_flag.wait(true);
event_flag = false;

// acquire mutex

// read data...

// release mutex

C++ 標准從未指定 C++ 代碼如何與共享 memory 和進程交互,其中大部分是實現定義的。

但是,似乎實現不是跨進程的:

  • libstdc++似乎在表中使用 futexes 和/或條件變量。 條件變量可能不會跨進程共享,但我沒有費心去檢查。
  • 微軟的 STL使用 futexes,不能跨進程工作。
  • libc++ 可能類似,我沒有費心檢查。

有一個關於進程管理的提議,但還沒有走得太遠,因為 C++ 標准沒有“進程”的概念。

如果最終指定了這種行為,我將編輯此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM