C++服务器端开发(7):并发处理

并发处理的方式包括线程、互斥锁、条件变量和原子操作。

1.线程:C++11 引入了标准线程库,可以通过 std::thread 类来创建和管理线程。通过在不同的线程中执行不同的任务,可以实现并发处理。

#include 
#include 

void foo()
{
    std::cout << "Thread 1" << std::endl;
}

void bar(int x)
{
    std::cout << "Thread 2: " << x << std::endl;
}

int main()
{
    std::thread t1(foo);
    std::thread t2(bar, 42);

    t1.join();
    t2.join();

    return 0;
}

2.互斥锁:C++11 中的 std::mutex 类提供了互斥锁的功能,可以用来保护共享资源,在多个线程中安全地访问和修改共享数据。

#include 
#include 
#include 

std::mutex mtx;

void func(int x)
{
    std::lock_guard lock(mtx);

    std::cout << "Thread " << x << std::endl;
}

int main()
{
    std::thread t1(func, 1);
    std::thread t2(func, 2);

    t1.join();
    t2.join();

    return 0;
}

3.条件变量:C++11 中的 std::condition_variable 类用于线程之间的同步和通信。可以用条件变量来等待某个条件满足后再继续执行。

#include 
#include 
#include 
#include 

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void worker()
{
    {
        std::unique_lock lock(mtx);
        cv.wait(lock, []{ return ready; });
        std::cout << "Thread 1" << std::endl;
    }
}

void signaler()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    {
        std::lock_guard lock(mtx);
        ready = true;
    }
    cv.notify_one();
}

int main()
{
    std::thread t1(worker);
    std::thread t2(signaler);

    t1.join();
    t2.join();

    return 0;
}

4.原子操作:C++11 中的 std::atomic 类用于实现原子操作,保证在多线程环境下对共享数据的操作是原子的,不会被其他线程打断。

#include 
#include 
#include 

std::atomic counter(0);

void increment()
{
    for (int i = 0; i < 1000000; ++i)
    {
        counter.fetch_add(1);
    }
}

void decrement()
{
    for (int i = 0; i < 1000000; ++i)
    {
        counter.fetch_sub(1);
    }
}

int main()
{
    std::thread t1(increment);
    std::thread t2(decrement);

    t1.join();
    t2.join();

    std::cout << "Counter: " << counter << std::endl;

    return 0;
}

你可能感兴趣的:(计算机,/,人工智能,C++更多语法,c++,算法,开发语言)