互斥量作为类成员

发布于 2024-11-06 06:58:48 字数 453 浏览 6 评论 0原文

 class temp
 {
    boost::mutex mx;
    void CriticalCode() {
        boost::mutex::scoped_lock scoped_lock(mx); 
        //Do Something
        return;
    }
 }
  1. 此类在堆上分配 (temp* T = new temp()),这是否是线程安全的(对于每个实例,而不是所有实例)?

  2. 如果我制作 boost::mutex mx -> boost::mutex* mx,并在构造函数中分配它,以便它将在堆上分配,代码也是线程安全的吗?

  3. 如果 1 和 2 的答案是否定的,如何使每个实例线程安全?

 class temp
 {
    boost::mutex mx;
    void CriticalCode() {
        boost::mutex::scoped_lock scoped_lock(mx); 
        //Do Something
        return;
    }
 }
  1. If this class is allocated on the heap (temp* T = new temp()), will this be thread safe (for each instance, not all instances together)?

  2. If I make boost::mutex mx -> boost::mutex* mx, and allocate it in the constructor so it will be allocated on the heap, will the code be thread safe also?

  3. If answer to 1 and 2 are no, how can I make each instance thread safe?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寻找一个思念的角度 2024-11-13 06:58:48

1) 如果此类分配在堆上 (temp* T = new temp()) ,这是否是线程安全的(对于每个实例,而不是所有实例在一起?

是的。因为 mx 不是一个类的静态成员,该类的每个实例将有一个锁

2) 如果我使 boost::mutex mx -> 。 boost::mutex* mx ,并在构造函数中分配它,这样它将在堆上分配,代码也是线程安全的吗?

是的。但线程安全仅在每个实例的基础上。

3)如果现在回答1和2,我怎样才能使每个实例线程安全?

答案是肯定的,所以你没问题。

万一,其他人想知道如何使用一个锁使所有实例都是线程安全的——您可以使 mx 成为类的静态变量。

1)if this class is allocated on the heap (temp* T = new temp()) , will this be thread safe (for each instance, not all instances together ?

Yes. Since mx is not a static member of the class, there will be one lock per instance of the class.

2)if i make boost::mutex mx -> boost::mutex* mx , and allocate it in the constructor so it will be allocated on the heap , will the code be thread safe also ?

Yes. But thread safe only on a per-instance basis.

3)if answer to 1 and 2 are now , how can i make each instance thread safe ?

The answers are yes so you are fine.

In case, someone else wonders how to make all instances thread safe with one lock -- you can make mx a static variable of the class.

感情旳空白 2024-11-13 06:58:48

存储位置与任何内容无关。

The storage location has nothing to do with anything.

我不会写诗 2024-11-13 06:58:48

是的,CriticalCode() 方法在这两种情况下都是线程安全的。

Yes, the method CriticalCode() will be thread safe in both cases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文