Rumah pembangunan bahagian belakang C++ Bagaimana untuk melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang?

Bagaimana untuk melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang?

Aug 27, 2023 am 09:27 AM
capai Kawalan konkurensi pengaturcaraan berbilang benang

Bagaimana untuk melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang?

Bagaimana untuk melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang?

Dengan perkembangan teknologi komputer, pengaturcaraan berbilang benang telah menjadi bahagian yang amat diperlukan dalam pembangunan perisian moden. Pengaturcaraan berbilang benang boleh meningkatkan prestasi dan responsif program, tetapi ia juga membawa masalah dengan kawalan serentak. Dalam persekitaran berbilang benang, berbilang utas yang mengakses sumber dikongsi pada masa yang sama boleh menyebabkan persaingan data dan ralat operasi. Oleh itu, mencapai kawalan serentak yang berkesan adalah bahagian penting dalam memastikan pelaksanaan program yang betul.

Dalam proses melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang, kami biasanya menggunakan teknologi biasa berikut:

  1. Mutex (Mutex): Mutex ialah salah satu mekanisme kawalan konkurensi yang paling mudah dan paling biasa digunakan. Ia mengehadkan hanya satu utas untuk mengakses sumber pada masa yang sama dengan mengunci sumber yang dikongsi. Dalam C++, kunci mutex boleh dilaksanakan melalui std::mutex. Berikut ialah kod contoh kunci mutex mudah:
#include <iostream>
#include <mutex>
#include <thread>

std::mutex mtx;

void printHello(int threadNum) {
    mtx.lock();
    std::cout << "Hello from thread " << threadNum << "!" << std::endl;
    mtx.unlock();
}

int main() {
    std::thread t1(printHello, 1);
    std::thread t2(printHello, 2);
    
    t1.join();
    t2.join();
    
    return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta dua utas dan memanggil fungsi printHello untuk mengeluarkan nombor utas. Memandangkan mutex mtx dikunci di dalam fungsi printHello, hanya satu utas boleh mengakses std::cout pada bila-bila masa, mengelakkan hasil keluaran yang mengelirukan.

  1. Pembolehubah Keadaan: Pembolehubah keadaan ialah mekanisme yang digunakan untuk penyegerakan benang dalam pengaturcaraan berbilang benang Ia membolehkan benang menunggu sehingga syarat tertentu dipenuhi dan dibangkitkan selepas syarat dipenuhi. Dalam C++, pembolehubah keadaan boleh dilaksanakan melalui std::condition_variable. Berikut ialah kod sampel untuk pembolehubah keadaan:
#include <iostream>
#include <condition_variable>
#include <mutex>
#include <thread>

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

void printHello(int threadNum) {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, [] { return ready; });
    std::cout << "Hello from thread " << threadNum << "!" << std::endl;
}

int main() {
    std::thread t1(printHello, 1);
    std::thread t2(printHello, 2);
    
    std::this_thread::sleep_for(std::chrono::seconds(2));
    
    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_all();
    
    t1.join();
    t2.join();
    
    return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta dua utas dan memanggil fungsi printHello untuk mengeluarkan nombor utas. Dalam keadaan awal, pembolehubah sedia adalah palsu, jadi dua utas menunggu pada pembolehubah syarat cv. Apabila kami menetapkan sedia kepada benar dalam fungsi utama, kami memberitahu utas menunggu melalui cv.notify_all(), dan kedua-dua utas itu dibangkitkan dan mengeluarkan hasilnya masing-masing.

  1. Kendalian Atom: Operasi atom ialah operasi tanpa gangguan Menggunakan operasi atom dalam persekitaran berbilang benang boleh mengelakkan persaingan data. Dalam C++, operasi atom boleh dilaksanakan melalui std::atomic. Berikut ialah kod sampel untuk operasi atom:
#include <iostream>
#include <atomic>
#include <thread>

std::atomic<int> counter(0);

void increment() {
    for (int i = 0; i < 100000; i++) {
        counter.fetch_add(1, std::memory_order_relaxed);
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);
    
    t1.join();
    t2.join();
    
    std::cout << "Counter: " << counter << std::endl;
    
    return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta dua urutan untuk melaksanakan 100,000 operasi penambahan atom pada kaunter. Memandangkan operasi atom tidak terganggu, akses serentak ke kaunter tidak menyebabkan perlumbaan data.

Melalui teknologi kawalan konkurensi biasa seperti kunci mutex, pembolehubah keadaan dan operasi atom, kami boleh mencapai kawalan serentak yang berkesan dalam pengaturcaraan berbilang benang dan memastikan pelaksanaan program yang betul.

Ringkasnya, apabila melaksanakan kawalan serentak dalam pengaturcaraan berbilang benang, anda perlu memberi perhatian kepada perkara berikut: Pertama, elakkan persaingan data dan ralat operasi, dan gunakan teknologi kawalan serentak yang sesuai. Kedua, mekanisme penyegerakan mesti direka bentuk secara munasabah untuk mengelakkan masalah seperti kebuntuan dan kebuluran. Akhir sekali, prestasi kawalan konkurensi perlu diuji dan ditala untuk memastikan pelaksanaan program yang cekap.

Melalui pembelajaran dan amalan berterusan, penerapan kawalan konkurensi dalam pengaturcaraan berbilang benang akan menjadi lebih mahir dan fleksibel, dan kami boleh menulis program berbilang benang yang lebih selamat dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kawalan konkurensi dalam pengaturcaraan berbilang benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Mar 24, 2024 am 11:27 AM

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Apakah kelebihan menggunakan ungkapan lambda C++ untuk pengaturcaraan berbilang benang? Apakah kelebihan menggunakan ungkapan lambda C++ untuk pengaturcaraan berbilang benang? Apr 17, 2024 pm 05:24 PM

Kelebihan ungkapan lambda dalam pengaturcaraan berbilang benang C++ termasuk kesederhanaan, fleksibiliti, kemudahan lulus parameter dan selari. Kes praktikal: Gunakan ungkapan lambda untuk mencipta berbilang benang dan mencetak ID benang dalam urutan yang berbeza, menunjukkan kesederhanaan dan kemudahan penggunaan kaedah ini.

Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Mar 20, 2024 pm 04:54 PM

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Mar 24, 2024 pm 06:03 PM

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

Kawalan konkurensi dan keselamatan benang dalam rangka kerja pengumpulan Java Kawalan konkurensi dan keselamatan benang dalam rangka kerja pengumpulan Java Apr 12, 2024 pm 06:21 PM

Rangka kerja koleksi Java mengurus konkurensi melalui koleksi selamat benang dan mekanisme kawalan konkurensi. Koleksi selamat benang (seperti CopyOnWriteArrayList) menjamin ketekalan data, manakala koleksi tidak selamat benang (seperti ArrayList) memerlukan penyegerakan luaran. Java menyediakan mekanisme seperti kunci, operasi atom, ConcurrentHashMap dan CopyOnWriteArrayList untuk mengawal konkurensi, dengan itu memastikan integriti dan konsistensi data dalam persekitaran berbilang benang.

Apakah tujuan kunci baca-tulis dalam pengaturcaraan berbilang benang C++? Apakah tujuan kunci baca-tulis dalam pengaturcaraan berbilang benang C++? Jun 03, 2024 am 11:16 AM

Dalam berbilang utas, kunci baca-tulis membenarkan berbilang utas membaca data pada masa yang sama, tetapi hanya membenarkan satu utas menulis data untuk meningkatkan konkurensi dan ketekalan data. Kelas std::shared_mutex dalam C++ menyediakan fungsi ahli berikut: lock(): Mendapat akses tulis dan berjaya apabila tiada thread lain memegang kunci baca atau tulis. lock_read(): Dapatkan kebenaran akses baca, yang boleh dipegang serentak dengan kunci baca atau tulis kunci lain. buka kunci(): Lepaskan kebenaran akses tulis. unlock_shared(): Lepaskan kebenaran akses baca.

Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Mar 16, 2024 pm 12:57 PM

Dalam bidang pembangunan perisian hari ini, Golang (bahasa Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, semakin digemari oleh pembangun. Perpustakaan standardnya yang kaya dan ciri-ciri konkurensi yang cekap menjadikannya pilihan berprofil tinggi dalam bidang pembangunan permainan. Artikel ini akan meneroka cara menggunakan Golang untuk pembangunan permainan dan menunjukkan kemungkinan besarnya melalui contoh kod tertentu. 1. Kelebihan Golang dalam pembangunan permainan Sebagai bahasa yang ditaip secara statik, Golang digunakan dalam membina sistem permainan berskala besar.

Panduan Pelaksanaan Keperluan Permainan PHP Panduan Pelaksanaan Keperluan Permainan PHP Mar 11, 2024 am 08:45 AM

Panduan Pelaksanaan Keperluan Permainan PHP Dengan populariti dan perkembangan Internet, pasaran permainan web menjadi semakin popular. Ramai pembangun berharap untuk menggunakan bahasa PHP untuk membangunkan permainan web mereka sendiri, dan melaksanakan keperluan permainan adalah langkah utama. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk melaksanakan keperluan permainan biasa dan menyediakan contoh kod khusus. 1. Cipta watak permainan Dalam permainan web, watak permainan adalah elemen yang sangat penting. Kita perlu mentakrifkan atribut watak permainan, seperti nama, tahap, nilai pengalaman, dll., dan menyediakan kaedah untuk mengendalikannya

See all articles