C ++会在类中创建的线程共享同一个类变量吗?

时间:2017-11-23 17:47:33

标签: c++ multithreading pthreads

我有一个这样的课程

class ThreadPool
{
public:
    ThreadPool();
    ThreadPool(int total_thread);
    ~ThreadPool();
    void active_pool(void);
    void* thread_start_routine(void* run_data);

private:
    int total_thread_;
    queue<TASK*> task_queue;
    sem_t* task_queue_mutex_;//Same function as mutex semaphore in P-C problem.
    sem_t* task_queue_full_;//Same function as full semaphore in P-C problem.
};

我将在active_pool函数中创建多个线程,每个线程入口函数都是thread_start_routine。

我的问题是如果每个人都必须使用队列task_queue进行推送/弹出,所有线程都会看到相同的队列,或者他们看到的每个队列只是通过线程创建的本地副本

谢谢〜

1 个答案:

答案 0 :(得分:2)

所有线程都会看到相同的队列。这就是并发编程的美妙之处。 (如果您希望每个线程有不同的实例,则可以使用thread_local存储持续时间 - 这是自C ++ 11以来C ++的新增功能。)

通常,您需要确保以线程安全的方式使用相关成员。原型类型(来自C ++ 11的std::atomic)和互斥单元(来自C ++ 11的std::mutex)用于此。

参考文献:

http://en.cppreference.com/w/cpp/keyword/thread_local

http://en.cppreference.com/w/cpp/atomic/atomic

http://en.cppreference.com/w/cpp/thread/mutex