了解不同处理器之间的OS调度

时间:2014-10-01 04:25:47

标签: c++ multithreading operating-system pthreads multicore

如果我有课

class A{
  A(){
   getcontext(context);
   makecontext(context, fun1, etc)
   put context pointer on queue
   }

  fun1(args){
    something
  }
 }

在我在CPU1上运行的Thread1中创建一个A类实例,然后尝试从队列中弹出上下文并从CPU2上的thread2交换它,是否会出现问题,因为该对象是在堆栈中实例化的CPU1中的Thread1因此无法访问受到此上下文攻击的fun1指针吗?

2 个答案:

答案 0 :(得分:1)

我会说答案是肯定的,不是。所有线程共享相同的内存。如果有多个线程访问该对象,则需要小心在线程之间同步访问。这是肯定的部分。

没有任何部分是你说的线程堆栈1.堆栈变量是函数的本地。如果函数返回,则局部变量不再有效。您没有显示足够的代码来查看创建上下文的位置,以及在堆栈上分配对象的函数是否等待,直到线程2完成。

答案 1 :(得分:0)

没有。线程的全部意义在于它们共享所有内存。