Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++

Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++

WBOY
WBOYasal
2024-05-31 22:01:04805semak imbas

Dalam pengaturcaraan berbilang benang C++, peranan primitif penyegerakan adalah untuk memastikan ketepatan berbilang utas yang mengakses sumber yang dikongsi Ia termasuk: Mutex (Mutex): melindungi sumber yang dikongsi dan menghalang akses serentak (Pembolehubah Keadaan) : Benang menunggu syarat tertentu untuk dipenuhi sebelum meneruskan pelaksanaan;

C++ 并发编程中的同步原语详解

Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++

Dalam pengaturcaraan berbilang benang, primitif penyegerakan adalah penting, yang boleh memastikan ketepatan apabila berbilang rangkaian mengakses sumber kongsi. C++ menyediakan set primitif penyegerakan yang kaya, termasuk kunci mutex, pembolehubah keadaan dan operasi atom.

Mutex (Mutex)

Mutex ialah mekanisme penyegerakan yang digunakan untuk melindungi sumber yang dikongsi. Apabila benang memperoleh kunci mutex, benang lain akan disekat sehingga kunci mutex dilepaskan. Dalam C++, anda boleh menggunakan kelas std::mutex untuk melaksanakan kunci mutex: std::mutex 类来实现互斥锁:

std::mutex mtx;
// ...
{
    // 获取互斥锁
    std::lock_guard<std::mutex> lock(mtx);
    // 临界区
} // 互斥锁在离开作用域时自动释放

条件变量 (Condition Variable)

条件变量允许线程等待某个特定条件满足才继续执行。在 C++ 中,可以使用 std::condition_variable

std::condition_variable cv;
// ...
{
    std::unique_lock<std::mutex> lock(mtx);
    // 等待条件满足
    cv.wait(lock);
    // 执行条件满足后要执行的代码
}

Pembolehubah Keadaan

Pembolehubah keadaan membenarkan urutan menunggu syarat tertentu dipenuhi sebelum meneruskan untuk melaksanakan. Dalam C++, anda boleh menggunakan kelas std::condition_variable untuk melaksanakan pembolehubah keadaan:

std::atomic<int> counter;
// ...
counter++; // 原子地增加 counter 的值

Operasi atom

Operasi atom menjamin bahawa operasi dilaksanakan dengan cara yang tidak terganggu. Dalam C++, anda boleh menggunakan perpustakaan atom untuk melaksanakan operasi atom:

std::atomic<int> counter;
std::mutex mtx;

// 写入线程
void write_thread() {
    while (true) {
        // 原子地增加计数器
        counter++;
    }
}

// 读取线程
void read_thread() {
    while (true) {
        // 保护地读取计数器
        std::lock_guard<std::mutex> lock(mtx);
        std::cout << "Counter: " << counter << std::endl;
    }
}

int main() {
    std::thread t1(write_thread);
    std::thread t2(read_thread);
    t1.join();
    t2.join();
    return 0;
}

🎜Kes praktikal🎜🎜🎜Pertimbangkan program dengan kaunter kongsi dan benang penulisan. Benang penulisan perlu menambah pembilang secara atom, manakala benang bacaan perlu membaca pembilang dengan berhati-hati: 🎜rrreee

Atas ialah kandungan terperinci Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn