2

我有一个关于 pthread 的问题,当我使用 malloc 在线程内创建一个变量然后将其指针传递给一个共享结构(即 fifo)时,thread-1 传递的指针是否会被 thread2 访问?

请注意,我必须为上面的问题编写代码,我只是想更好地理解线程,下面就是我的想法。环境是pthread , clinux

据我所知,线程正在共享其父进程的内存,如果是这种情况,下面应该是正确的。

void *thread-1(void *pointer)
{
  int *intp = malloc(4);
  send_to_fifo(intp);
}


void *thread-2(void *pointer)
{
  int *iptr;
  iptr = read_from_fifo();
  do_something(iptr);
  free(iptr);
}
4

2 回答 2

6

thread-1 传递的指针是否会被 thread2 访问?

是的:因为所有线程都在公共内存空间中运行,所以这是允许的。

malloc, free, 和其他内存管理函数默认是线程安全的,除非用NO_THREADS.

于 2012-11-24T00:12:44.140 回答
3

你当然可以这样做。但是,当变量被另一个线程使用时,您必须小心不要写入变量。你需要同步。

在您的情况下,如果线程同时运行(线程 2 不等待线程 1 完成),则您有竞争条件:线程 2 要么在线程 1 将任何内容放入 fifo 之前或之后执行它的所有代码。

于 2012-11-24T00:17:02.503 回答