multithreading - Chdir 和Setuid 以及Setgid 线程安全吗?

标签 multithreading go

os. Chdiros.Setuidos.Setgid 在 Go 中线程安全吗?

换句话说,如果我在两个并行运行的不同 goroutine 中执行 os.Chdir(或其他两个函数),它会改变工作 goroutine 的目录还是整个过程(这会导致问题)?

我在文档中找不到任何信息。

最佳答案

在引擎盖下,os.Chdir 只是 calls chdir() 系统调用:

   211  func Chdir(dir string) error {
   212      if e := syscall.Chdir(dir); e != nil {
   213          return &PathError{"chdir", dir, e}
   214      }
   215      return nil
   216  }

所以它影响了整个过程。 os.Setuidos.Setgid 也是如此。

同时从多个 goroutine 调用它们可能是安全的,因为执行系统调用会暂停调度程序;但要注意竞争条件。

关于multithreading - Chdir 和Setuid 以及Setgid 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23180000/

相关文章:

ios - 从数组访问 NSNumber 时崩溃

c# - 使用TaskScheduler.UnobservedTaskException可以避免进程被杀死吗?

go - 在命令行上使用 Go,如何隐藏来自用户终端的命令行输入?

go - Go 是如何进行系统调用的?

go - 在 golang 终端应用程序中以编程方式结束输入

go - 读取 RPi 的 GPIO 上的温度传感器值。脚步

java - 为什么使用 Java 线程并没有快多少?

Java代码 - 线程相互阻塞

c++ - 具有pthread和锁且无提升的单读者多作者

json - 抽象 GET、读取、解码逻辑