Go中的os. Chdir
,os.Setuid
和os.Setgid
线程安全吗?
换句话说,如果我在并行运行的两个不同的goroutine中执行os.Chdir
(或其他两个函数),它是否会更改工作goroutine或整个过程的目录(这会导致问题)?
我在文档中找不到任何信息。
答案 0 :(得分:6)
在幕后,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.Setuid
和os.Setgid
也是如此。
同时从多个goroutine中调用它们可能是安全的,因为执行系统调用会暂停调度程序;但要注意竞争条件。