相关疑难解决方法(0)

Linux和gcc 4中的C++ new运算符线程安全性

不久,我将开始使用共享内存开发并行版本的网格细化算法.

该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不是线程感知的.

我搜索了这个问题,答案取决于编译器(有些尝试有点线程感知)和平台(如果编译器使用的系统调用是否是线程安全的).

那么,在linux中,gcc 4编译器为new运算符生成线程安全的代码?

如果没有,解决这个问题的最佳方法是什么?也许锁定每个呼叫到新的运营商?

c++ linux gcc thread-safety

14
推荐指数
2
解决办法
1万
查看次数

互斥体可以确保对象的线程可见性,而不是明确地保护它们吗?

考虑以下代码,线程是否可能以不同的方式看到对象的状态,尽管它们都是由相同的指针引用的?

using namespace std;

class ProducerAndConsumer{

  class DummyObject {
  public:
    DummyObject() {
      sprintf(a, "%d", rand());
    }
  private:
    char a[1000];
  };

  mutex queue_mutex_;
  queue<DummyObject *> queue_;
  thread *t1, *t2;

  void Produce() {
    while (true) {
      Sleep(1);
      // constructing object without any explicit synchronization
      DummyObject *dummy = new DummyObject();
      {
        lock_guard<mutex> guard(queue_mutex_);
        if (queue_.size() > 1000) {
          delete dummy;
          continue;
        }
        queue_.push(dummy);
      }
    }
  }

  void Consume() {
    while (true) {
      Sleep(1);
      DummyObject *dummy;
      {
        lock_guard<mutex> guard(queue_mutex_);
        if (queue_.empty())
          continue;
        dummy = …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

4
推荐指数
1
解决办法
141
查看次数

标签 统计

c++ ×2

gcc ×1

linux ×1

multithreading ×1

thread-safety ×1