c++面试中的编程

1.C++中使用条件变量的方法

在通常与互斥锁(std::mutex)一起使用,允许线程在某些条件不满足时进入休眠状态,并在条件满足时被唤醒。

1. 包含必要的头文件

在C++中,条件变量定义在<condition_variable>头文件中,因此需要包含该头文件:

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

2. 定义条件变量和互斥锁

条件变量需要与一个互斥锁一起使用,互斥锁用于保护共享资源的访问。通常使用std::mutex作为互斥锁。

std::condition_variable cv;
std::mutex mtx;
bool ready = false; // 共享变量,表示条件是否满足

3. 等待条件

线程可以通过调用std::condition_variable::waitstd::condition_variable::wait_for方法来等待条件变量。wait方法会阻塞当前线程,直到条件变量被通知。

void waiting_thread()
{
    std::unique_lock<std::mutex> lock(mtx); // 加锁
    cv.wait(lock, [] { return ready; });   // 等待条件变量,直到ready为true
    std::cout << "Waiting thread is done waiting.\n";
}

4. 通知条件变量

当条件满足时,可以通过调用std::condition_variable::notify_onestd::condition_variable::notify_all方法来通知等待的线程。

  • notify_one:唤醒一个等待的线程。

  • notify_all:唤醒所有等待的线程。

void notifying_thread()
{
    {
        std::lock_guard<std::mutex> lock(mtx); // 加锁
        ready = true;                          // 修改共享变量
    } // 锁自动释放
    cv.notify_one(); // 通知一个等待的线程
}

5. 完整示例代码

以下是一个完整的示例代码,展示了如何使用条件变量协调两个线程的行为:

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

std::condition_variable cv;
std::mutex mtx;
bool ready = false; // 共享变量,表示条件是否满足

void waiting_thread()
{
    std::unique_lock<std::mutex> lock(mtx); // 加锁
    cv.wait(lock, [] { return ready; });   // 等待条件变量,直到ready为true
    std::cout << "Waiting thread is done waiting.\n";
}

void notifying_thread()
{
    {
        std::lock_guard<std::mutex> lock(mtx); // 加锁
        ready = true;                          // 修改共享变量
    } // 锁自动释放
    cv.notify_one(); // 通知一个等待的线程
}

int main()
{
    std::thread t1(waiting_thread); // 创建等待线程
    std::thread t2(notifying_thread); // 创建通知线程

    t1.join(); // 等待t1线程结束
    t2.join(); // 等待t2线程结束

    return 0;
}

2.数据库

CREATE TABLE student(
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age INT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值