[英]Posix thread arguments issue ( C )
我在使用C時遇到了一些麻煩。我是一個相對較新的程序員,我試圖創建一個結構並將其通過引用傳遞給兩個線程。 我希望一個線程將信息放入結構中,而另一個線程將信息添加並打印出來。 我在說什么的偽代碼如下:
typedef struct{ int x, y }addme;
main{
addme argstopass;
create_thread(method_store, (void*)&argstopass);
create_thread(method_calc, (void*)&argstopass);
//Code to tell store thread 'only' to run
//Code to tell calc thread to run when store is finished.
join_both_threads;
}
void method_store(void* args){
addme info = *((addme*)args);
info.a = 7;
info.b = 3;
}
void method_calc(void* args){
addme info = *((addme*)args);
print(info.a+info.b);
}
問題是,當我嘗試添加信息時,就像store方法從未更新過它。 傳遞給線程的引用是相同的,因此我無法理解為什么只要它們都有指向它的指針,它們就無法訪問相同的信息。
希望這里有人可以啟發我我做錯了什么。 如果不清楚,請發表評論,我會幫助您澄清。
addme info = *((addme*)args);
在堆棧上創建一個語言環境變量,並將argstopass
內容argstopass
到其中。 修改僅在此局部變量上發生,因此第二個線程將看不到。
采用
addme *info = args;
info->a = 7;
和第二個線程同上。 您將必須確保第二個線程等待其printf()直到第一個線程修改了值。
void method_store(void* args){
addme info = *((addme*)args);
info.a = 7;
info.b = 3;
}
此方法創建您的結構字段的本地副本,更新該本地副本,然后返回,銷毀該副本並且不對您的主結構執行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.