Linux C++多线程与并发数据结构的实现

发布时间:2024-11-15 18:24:02 作者:小樊
来源:亿速云 阅读:78

在Linux环境下,使用C++实现多线程和并发数据结构需要依赖于一些库和工具,如POSIX线程库(pthread)和C++11标准中的线程支持

  1. 多线程的实现:

在Linux环境下,可以使用POSIX线程库(pthread)来实现多线程。以下是一个简单的C++多线程示例:

#include <iostream>
#include <pthread.h>

void* print_hello(void* arg) {
    std::cout << "Hello from thread " << pthread_self() << std::endl;
    return nullptr;
}

int main() {
    pthread_t threads[5];
    int rc;

    for (int i = 0; i < 5; ++i) {
        rc = pthread_create(&threads[i], nullptr, print_hello, nullptr);
        if (rc != 0) {
            std::cerr << "Error creating thread "<< i << std::endl;
            return 1;
        }
    }

    for (int i = 0; i < 5; ++i) {
        pthread_join(threads[i], nullptr);
    }

    return 0;
}
  1. 并发数据结构的实现:

在Linux环境下,可以使用C++11标准中的线程支持来实现并发数据结构。以下是一个简单的线程安全队列示例:

#include <iostream>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>

template <typename T>
class ThreadSafeQueue {
public:
    void push(const T& value) {
        std::unique_lock<std::mutex> lock(mutex_);
        queue_.push(value);
        lock.unlock();
        cond_var_.notify_one();
    }

    bool pop(T& value) {
        std::unique_lock<std::mutex> lock(mutex_);
        while (queue_.empty()) {
            cond_var_.wait(lock);
        }
        value = queue_.front();
        queue_.pop();
        return true;
    }

private:
    std::queue<T> queue_;
    std::mutex mutex_;
    std::condition_variable cond_var_;
};

void producer(ThreadSafeQueue<int>& queue) {
    for (int i = 0; i < 10; ++i) {
        queue.push(i);
        std::cout << "Produced: "<< i << std::endl;
    }
}

void consumer(ThreadSafeQueue<int>& queue) {
    int value;
    for (int i = 0; i < 10; ++i) {
        if (queue.pop(value)) {
            std::cout << "Consumed: " << value << std::endl;
        }
    }
}

int main() {
    ThreadSafeQueue<int> queue;
    std::thread producer_thread(producer, std::ref(queue));
    std::thread consumer_thread(consumer, std::ref(queue));

    producer_thread.join();
    consumer_thread.join();

    return 0;
}

在这个示例中,我们实现了一个线程安全的队列,它使用互斥锁(mutex)来保护队列的访问,并使用条件变量(condition_variable)来实现线程间的同步。生产者线程向队列中添加元素,消费者线程从队列中取出元素。通过这种方式,我们可以实现一个简单的并发数据结构。

推荐阅读:
  1. 如果你是小白,linux快速入门技术值得你收藏
  2. linux开发需要的知识有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:如何在Linux C++项目中设计可扩展的多线程架构

下一篇:C++多线程在Linux下的线程池任务调度

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》