Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ C++;类中创建的线程是否共享相同的类变量?_C++_Multithreading_Pthreads - Fatal编程技术网

C++ C++;类中创建的线程是否共享相同的类变量?

C++ C++;类中创建的线程是否共享相同的类变量?,c++,multithreading,pthreads,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;

我有一节这样的课

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.
};
类线程池
{
公众:
线程池();
线程池(总线程数);
~ThreadPool();
无效活动池(无效);
void*线程启动程序(void*运行数据);
私人:
总线程数;
队列任务队列;
sem_t*task_queue_mutex_;//与P-C问题中的互斥信号量的功能相同。
sem_t*task_queue_full///与P-C问题中的完整信号量的功能相同。
};
我将在active_pool函数中创建多个线程,每个线程入口函数都是thread_start_例程

我的问题是,如果每个线程都必须使用queue task\u queue推/弹出,那么所有线程会看到同一个队列,还是它们看到的每个队列都只是通过线程创建的本地副本


谢谢~所有线程将看到相同的队列。这就是并发编程的美妙之处。(如果您希望每个线程都有不同的实例,则可以使用<代码> THeLexStase< /Cord>存储持续时间。这是C++ 11以来C++的新添加)。 通常,您需要确保以线程安全的方式使用相关成员。原子类型(
std::Atomic
来自C++11)和互斥单元(
std::mutex
来自C++11)用于此

参考资料:


@HaohaoChang线程都共享同一进程的地址空间。如果你不想要一个共享的地址空间,那么你就不想要线程,而是需要单独的进程,每个进程都有自己的地址空间。