Chdir和Setuid和Setgid线程是否安全?

时间:2014-04-20 08:23:11

标签: multithreading go

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

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

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

1 个答案:

答案 0 :(得分:6)

在幕后,os.Chdircalls 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中调用它们可能是安全的,因为执行系统调用会暂停调度程序;但要注意竞争条件。