在C ++ / CLI代码中包含的代码中使用<thread>。寻找更好的解决方案

时间:2017-11-02 10:02:57

标签: c++ multithreading c++-cli

原生C ++“a.h”:

#include <thread>

class a
{
    //... 
private:
    // ...
    std::mutex mutex;
};

C ++ / CLI:

#include "a.h" // error cause thread is included

我的解决方案:

原生C ++“a.h”:

class a
{
    a();
    ~a();
    //... 
private:
    // ...
    void* mutex;
};

“a.cpp”

#include <thread>

a::a()
{
    mutex = new std::mutex;
}

~a::a()
{
    delete mutex;
}

C ++ / CLI:

#include "a.h" // no error
  1. 如何在没有动态内存分配的情况下执行此操作?
  2. 这样安全吗?我以某种方式使用来自&lt;线程&gt;在C ++ / CLI环境中,不在标题中。
  3. 有更好的方法吗?新的/删除和每次使用的演员似乎都很糟糕。我希望每个对象都有一个互斥锁。

1 个答案:

答案 0 :(得分:-1)

模板随时为您提供帮助!

A.H:

template <class MutextType>
class a
{
    //... 
private:
    // ...
    MutextType mutex;
};

然后,在你的主要或任何地方:

#inculde <thread>
//...
a<std::mutex> instance;

如果您愿意,还可以使用using语句进行清理,以获得更清晰的代码:

#inculde <thread>
//...
using MutexA = a<std::mutex>;
//...
MutexA instance;