线程工作目录

leJ*_*Jon 5 c++ multithreading c++11

根据定义,单个程序的多个线程共享它们的工作目录。您是否知道是否可以将每个线程都放在专用的工作目录中?也许是一个特定的图书馆?

注意:目标语言是c ++

Chr*_*nto 7

这个概念并不存在于每个操作系统上,但至少在 Linux 和 Mac OS 上存在。

在 Linux 上,clone使用CLONE_THREAD和不使用CLONE_FS. 或者,通常创建一个线程并unshareCLONE_FS. 然后,正常使用chdirfchdir

在 Mac OS 上使用pthread_chdir_nppthread_fchdir_np. 这些调用的文档很少,但从 10.12 开始可用。该铬源表示,这个概念自10.5存在,但你必须直接使用系统调用。

大多数情况下,您会更喜欢*at调用系列,但在某些情况下无法使用它们——例如,connecting 或binding Unix 域套接字。


Pau*_*ans 6

工作目录是为给定进程固定的环境属性。您可能想通过简单地使用一个特定于线程的字符串为每个线程模拟一个工作目录概念,该字符串为每个线程保存一个不同的目录。

  • 另一种选择是使用 `openat(dirfd, ...)` 和相关函数。这允许您将每个线程的文件描述符保存到每个线程的工作目录而不是字符串。只要您不关闭文件描述符,这样做的好处是可以执行路径验证并使目录保持活动状态。 (2认同)