c - 需要动态 pthread 生成同步(???)

标签 c pthreads

我正在尝试使用 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 分配给该整数,将新的 mallocd 整数传递给线程,让线程free 完成后即可。

关于c - 需要动态 pthread 生成同步(???),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940471/

相关文章:

c++ - 如何在 Linux 上的 C++ 中包含 <atomic>?

使用线程计算两个数字的总和

c - 编译过程中出现错误?

c++ - 进程是否在退出时自动清理 pthreads 占用的资源

pthreads - 在MingW下编译简单的pthread代码时出现链接器错误

linux - Linux 中的线程亲和性

c - 如何使用c从csv文件中获取具有精确数据的特定行?

c++ - 使用 HTTP 作为传输的消息传递中间件

c - C 程序的奇怪输出随重定向而改变

c - 是否可以创建变量名称数组?