Если у меня есть класс
class A{
A(){
getcontext(context);
makecontext(context, fun1, etc)
put context pointer on queue
}
fun1(args){
something
}
}
Когда я создаю экземпляр класса A в Thread1, работающем на CPU1, а затем пытаюсь извлечь контекст из очереди и поменять его из thread2 на CPU2, возникнет проблема, поскольку объект был создан в стеке Thread1 в CPU1 и, следовательно, указатель на fun1, который атакован в этом контексте, недоступен?
Нет. Весь смысл потоков в том, что они разделяют всю память.
Я бы сказал, что ответ да и нет. Все темы разделяют одну и ту же память. Если к объекту обращается более 1 потока, необходимо соблюдать осторожность при синхронизации доступа между потоками. Это да часть.
Нет части, когда вы сказали, что стек потока 1. Переменные стека являются локальными для функции. Если функция возвращает, локальные переменные больше не действительны. Вы не показываете достаточно кода для меня, чтобы увидеть, где создается контекст, и если функция, которая размещает объект в стеке, ждет, пока завершится поток 2.