簡體   English   中英

C++ Builder 10.4 社區版 => scoped_lock 丟失(至少似乎是一個路徑混亂)

[英]C++ Builder 10.4 community edition => scoped_lock are missing (at least seems to be a path mess)

剛剛安裝了 C++Builder 10.4 社區版。 我的應用程序是一個控制台多線程應用程序,並使用std::scoped_lock (C++17)。

It seems that C++Builder chooses a <mutex> header file that does not define scoped_lock in C:\Program Files (x86)\Embarcadero\Studio\21.0\include\dinkumware64 , where the <mutex> header file that is in C:\Program Files (x86)\Embarcadero\Studio\21.0\include\dinkumware64\Dinkum\threads實際上確實定義了它們,但不是在包含解析期間使用的。

我錯過了什么? 這有沒有被測試過?

從安裝中重新啟動 C++Builder,創建一個新的控制台、多線程應用程序,為main()獲取預先生成的 shim 代碼並添加以下代碼:

#pragma hdrstop
#pragma argsused

#include <mutex>

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>

std::mutex m;

int _tmain(int argc, _TCHAR* argv[]) 
{
    std::scoped_lock lock(m);
    return 0;
}

這將失敗並出現錯誤:

命名空間“std”中沒有名為“std::scoped_lock”的成員

該應用程序是 32 位,調試。 我嘗試了 64 位,因為<mutex> header 奇怪地位於dinkumware64/mutex下,並且調試無/調試,我嘗試更改各種選項但無濟於事。

現在在dinkumware64/Dinkum/threads/下,還有另一個“互斥鎖” package 包含scoped_lock ,但我不知道為什么 C++Builder 會選擇它,而且它也不在std命名空間中。

標准庫也位於dinkumware64中,用於 32 位程序,所以你應該去那里看看。

問題是標准庫中缺少scoped_lock

您可以使用std::lock自己輕松實現此 class ,或者如果您只有一個互斥鎖,則只需使用std::lock_guard

暫無
暫無

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

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