在C++中,getcwd()
函数用于获取当前工作目录
以下是一个使用互斥锁(mutex)实现多线程同步的示例:
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
#include <cstring>
#include <unistd.h>
std::mutex mtx; // 定义互斥锁
char cwd[PATH_MAX]; // 存储当前工作目录的缓冲区
void print_cwd() {
mtx.lock(); // 在打印当前工作目录之前加锁
if (getcwd(cwd, sizeof(cwd)) != nullptr) {
std::cout << "Current working directory: " << cwd << std::endl;
} else {
std::cerr << "Error getting current working directory" << std::endl;
}
mtx.unlock(); // 解锁
}
int main() {
std::vector<std::thread> threads;
// 创建多个线程
for (int i = 0; i < 10; ++i) {
threads.emplace_back(print_cwd);
}
// 等待所有线程完成
for (auto& t : threads) {
t.join();
}
return 0;
}
在这个示例中,我们创建了一个互斥锁mtx
和一个全局缓冲区cwd
。print_cwd()
函数在打印当前工作目录之前加锁,并在完成后解锁。这样可以确保在同一时间只有一个线程可以访问和修改cwd
。
请注意,这个示例仅用于演示目的。在实际应用中,你可能需要考虑其他因素,例如错误处理和线程安全的数据结构。