c++ 线程使用

C++中的线程可以通过标准库提供的thread类实现。该类提供了创建和管理线程的方法和函数。

创建线程的方法:

#include <thread>

...

// 创建一个线程,其执行函数为func1,传递参数为arg1
std::thread t1(func1, arg1);

// 创建一个线程,其执行函数为func2
std::thread t2(func2);

// 等待t1执行完毕
t1.join();

// 等待t2执行完毕
t2.join();

上述代码中,func1和func2代表函数指针,arg1是传递给func1的参数,t1和t2是线程对象,join()方法用于等待线程执行完毕。

线程函数的定义:

线程函数可以是任何可调用对象,包括函数指针、函数对象、lambda表达式等。线程函数的实现需要注意线程安全问题。

#include <iostream>
#include <thread>

void worker(int id)
{
    std::cout << "Worker " << id << " is starting..." << std::endl;
    // 执行任务
    std::cout << "Worker " << id << " is finished." << std::endl;
}

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

    // 等待t1执行完毕
    t1.join();

    // 等待t2执行完毕
    t2.join();

    return 0;
}

如上述代码所示,worker函数用于执行具体的任务,通过std::thread对象创建线程,将worker函数作为线程执行函数,并传入参数,通过join()方法等待线程执行完毕。

线程的同步与互斥:

在多线程程序中,很容易出现多个线程同时访问同一个数据或资源的情况,这时就需要对线程进行同步和互斥操作,以避免数据竞争等问题。

在C++中,提供了一些同步和互斥的机制,如:互斥锁、条件变量、原子操作等。

#include <iostream>
#include <thread>
#include <mutex>

std::mutex m;

void worker(int id)
{
    // 加锁
    m.lock();
    std::cout << "Worker " << id << " is starting..." << std::endl;
    // 执行任务
    std::cout << "Worker " << id << " is finished." << std::endl;
    // 解锁
    m.unlock();
}

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

    // 等待t1执行完毕
    t1.join();

    // 等待t2执行完毕
    t2.join();

    return 0;
}

如上述代码所示,为线程添加互斥锁可以避免多个线程同时访问同一个数据或资源的问题,执行互斥锁加锁和解锁操作就可以实现线程之间的同步和互斥。

总结:

C++中提供了thread类实现线程的创建和管理,线程函数可以是任何可调用对象。在多线程编程中,需要注意线程安全问题,可以通过互斥锁、条件变量等机制实现线程之间的同步和互斥。

 

posted on   百足Coder  阅读(222)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示