如何以线程安全的方式更改目录?
How can I change directories in a thread safe way?
>我想生成 2 个线程并将每个线程移动到不同的工作目录中。
std::thread t1([](){
boost::filesystem::current_path("/place/one");
// operate within "place/one"
});
std::thread t2([](){
boost::filesystem::current_path("/place/two");
// operate within "place/two"
});
t1.join();
t2.join();
但是,这是行不通的。
提升文档显示以下内容:
void current_path(const path&p(;
效果:建立后置条件,仿佛通过 ISO/IEC 9945 chdir((。
后置条件:等价(p, current_path(((。
抛出:如错误报告中指定的那样。
[注意:许多操作系统的当前路径是危险的 全局状态。它可能被第三方意外更改或 系统库函数,或通过另一个线程。 -- 尾注]
自current_path
即chdir
不是线程安全的,则最后一个更改目录的线程将影响另一个线程的全局状态。
它们都将在相同的目录中运行。
但是我的选择是什么? 基于现有代码,我希望避免在假设不同的当前工作目录时重新连接线程逻辑。生成过程是我唯一的其他选择吗?
由于 UNIX 进程具有由其所有线程共享的唯一当前目录,因此如果需要不同的current_path,生成进程确实是必需的。 但是,可移植性将受到影响。
相关文章:
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 在C++中使用线程查找友好号码比单个线程花费更多时间
- 将更高的优先级设置为 boost::asio 线程处理进程
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 如何以线程安全的方式更改目录?
- 等待线程的最佳方式是什么
- 一个互斥锁与多个互斥锁.哪一个更适合线程池?
- 如何使用 pthreads 以正确的方式设置两个线程之一的优先级
- 为什么我的特征代码不使用更多线程扩展
- 为什么我的程序在 1 个线程上运行得比在 8 个线程上运行得更快.C++
- 如何修复下一个线程以使其更正确?使用 Pthread
- 更好的做法:永远循环线程或连续线程
- 可能以有效的方式在模拟的循环中进行多线程
- Eclipse CDT 多线程调试不是最佳的 - 如何以独占方式运行线程
- 如何使用pthreads以智能的方式向线程共享变量
- 以最优雅的方式同步线程
- 如何以可导出的方式命名线程