在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
。
請注意,這個示例僅用于演示目的。在實際應用中,你可能需要考慮其他因素,例如錯誤處理和線程安全的數據結構。