在尝试从头开始创建线程安全的容器类时,我遇到了从访问方法返回值的问题。例如在 Windows 中:
myNode getSomeData( )
{
EnterCriticalSection(& myCritSec);
myNode retobj;
// fill retobj with data from structure
LeaveCriticalSection(& myCritSec);
return retobj;
}
现在我认为这种类型的方法根本不是线程安全的,因为在代码释放临界区之后,另一个线程能够出现并retobj
在第一个线程返回之前立即覆盖。那么retobj
以线程安全的方式返回调用者的优雅方式是什么?