Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用<;螺纹>;包含在C++/CLI代码。寻找更好的解决方案 本机C++“AH”:_C++_Multithreading_C++ Cli - Fatal编程技术网

使用<;螺纹>;包含在C++/CLI代码。寻找更好的解决方案 本机C++“AH”:

使用<;螺纹>;包含在C++/CLI代码。寻找更好的解决方案 本机C++“AH”:,c++,multithreading,c++-cli,C++,Multithreading,C++ Cli,我的解决方案: 本机C++“AH”: “a.cpp” 如何在没有动态内存分配的情况下做到这一点 这安全吗?在C++/CLI环境中,我不知何故使用了中的包装内容,只是没有在标题中使用 有更好的方法吗?新/删除和每次使用的强制转换似乎都很糟糕。我希望类的每个对象都有一个互斥对象 模板在这里帮助你 a、 h: 模板 甲级 { //... 私人: // ... 互斥类型互斥; }; 然后,在你的主要或任何地方: #inculde <thread> //... a<std::mute

我的解决方案:

本机C++“AH”:

“a.cpp”

  • 如何在没有动态内存分配的情况下做到这一点
  • 这安全吗?在C++/CLI环境中,我不知何故使用了中的包装内容,只是没有在标题中使用
  • 有更好的方法吗?新/删除和每次使用的强制转换似乎都很糟糕。我希望类的每个对象都有一个互斥对象

  • 模板在这里帮助你

    a、 h:

    模板
    甲级
    {
    //... 
    私人:
    // ...
    互斥类型互斥;
    };
    
    然后,在你的主要或任何地方:

    #inculde <thread>
    //...
    a<std::mutex> instance;
    
    #包括
    //...
    实例;
    
    如果愿意,您还可以使用using语句进行清理,以获得更干净的代码:

    #inculde <thread>
    //...
    using MutexA = a<std::mutex>;
    //...
    MutexA instance;
    
    #包括
    //...
    使用MutexA=a;
    //...
    互斥实例;
    
    在寻求更好的解决方案时,您需要解释您想要实现的目标,而不仅仅是展示您的解决方案。没有动态内存分配?只需使用
    mutex
    而不是
    mutex*
    ?“只需使用mutex而不是mutex*”确定。怎么做?PIMPL习语。你能在C++中使用标准的C++库吗?它是非法的,你不能假定.NET代码使用操作系统线程。这取决于主机,从技术上讲,它可能使用光纤而不是线程。事实上,这并不值得深为担忧,“绿色线程”在上个世纪很流行,并被多核革命所淘汰。但规则是,如果是光纤,你的互斥锁根本无法工作。您需要对C++/CLI编译器隐藏实现细节,标准技术是抽象接口或pimpl习惯用法。
    class a
    {
        a();
        ~a();
        //... 
    private:
        // ...
        void* mutex;
    };
    
    #include <thread>
    
    a::a()
    {
        mutex = new std::mutex;
    }
    
    ~a::a()
    {
        delete mutex;
    }
    
    #include "a.h" // no error
    
    template <class MutextType>
    class a
    {
        //... 
    private:
        // ...
        MutextType mutex;
    };
    
    #inculde <thread>
    //...
    a<std::mutex> instance;
    
    #inculde <thread>
    //...
    using MutexA = a<std::mutex>;
    //...
    MutexA instance;