我正在尝试使用 posix 线程编写一些代码,但我从第一步就陷入了困境,说实话我不明白为什么。我知道我的问题可能与某种同步有关,但我无法弄清楚。
我的主要内容如下:
while(1){
int x = getX();
pthread_t t;
printf("Main: %d\n",x);
pthread_create(&t, NULL, process_x, &x);
}
当我尝试从 main 和 process_x 函数打印 x 值时,我得到的是这样的:
Main: 1
Main: 2
Main: 3
Main: 4
Main: 5
Process_x: 5
我在这里想念什么?
---- 编辑 -----
好吧,也许我需要提供更多信息。 getX 函数从套接字接收数据并返回一个标识符,而现在为了满足我们的需要,process_x 只是打印它接收到的参数。
最佳答案
您需要考虑将x
的地址传递给线程,然后无需等待线程完成打印,即可修改它的值。显然,这意味着如果在线程打印其值之前经过几次迭代,该值就会发生变化。
解决这个问题的两种方法:
1) 使用 pthread_join
并等待线程完成。这本质上是没有用的。因为那么产生新线程的意义何在?
或者
2)为每个线程分配一个新的地址,并在打印完成后让线程释放它。
即malloc
一个新整数,将 x
分配给该整数,将新的 malloc
d 整数传递给线程,让线程free
完成后即可。
关于c - 需要动态 pthread 生成同步(???),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940471/