温馨提示×

C++ getcwd如何处理多线程同步

c++
小樊
82
2024-11-27 14:53:14
栏目: 编程语言

在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和一个全局缓冲区cwdprint_cwd()函数在打印当前工作目录之前加锁,并在完成后解锁。这样可以确保在同一时间只有一个线程可以访问和修改cwd

请注意,这个示例仅用于演示目的。在实际应用中,你可能需要考虑其他因素,例如错误处理和线程安全的数据结构。

0