簡體   English   中英

Posix線程參數問題(C)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM