0
我有一個線程,它爲每個生成的作業提供一些本地數據。我想檢查我是否可以通過「局部變量」的參照作業(仿)在多線程環境中將局部變量作爲常量引用傳遞
例如傳球,
ThreadPool tp;
void func(){
Employee emp;
tp.enqueueJob(bind(&foo,emp));
}
void foo(const Employee &emp){
//Access emp when the job is executed.
}
所以,問題是,按照標準將我保證當控制超出func
後,從foo
執行作業時有權訪問Employee
?
我知道它是不安全的假設,我們可以訪問本地變量,一旦我們走出塊,但只是想檢查,因爲一些編譯器都允許返回一個局部變量爲const引用。
得到它之間的訪問。快速的問題,所以你的意思是綁定需要emp作爲值並傳遞給foo作爲const引用? (並使用std :: ref來確保綁定也需要ref?) – theAlias
@theAlias:是的。 'bind'產生一個包含其參數拷貝的對象,它用作函數的參數; 'ref'給出了一個「引用包裝器」類型,它就像是對其參數的引用。 –