Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Teknik pengaturcaraan tak segerak dalam C++

Teknik pengaturcaraan tak segerak dalam C++

王林
王林asal
2023-08-22 16:24:261332semak imbas

Teknik pengaturcaraan tak segerak dalam C++

C++ ialah bahasa pengaturcaraan popular yang digunakan secara meluas dalam pelbagai jenis aplikasi, terutamanya yang berfungsi lebih kompleks atau mempunyai keperluan yang tinggi pada sumber sistem. Oleh itu, kemahiran pengaturcaraan tak segerak telah menjadi semakin penting dalam pembangunan C++ dalam beberapa tahun kebelakangan ini, kita akan meneroka cara menggunakan C++ untuk pengaturcaraan tak segerak.

Latar Belakang Pengaturcaraan Asynchronous

Untuk beberapa tugas yang membosankan dan memakan masa, model pengaturcaraan segerak tidak dapat memenuhi keperluan Sistem pengendalian sering menetapkan tugasan ini kepada mod tak segerak untuk menggunakan sumber sistem dengan lebih cekap. Dengan model pengaturcaraan tak segerak, program boleh melaksanakan berbilang tugas secara selari tanpa menunggu tugas sebelumnya selesai. Ini membantu meningkatkan prestasi keseluruhan program.

Petua Pengaturcaraan Asynchronous

Apabila melakukan pengaturcaraan tak segerak dalam C++, kita perlu menggunakan perpustakaan tak segerak. Antaranya, piawaian C++11 termasuk perpustakaan tak segerak, std::async, yang boleh menjalankan fungsi dalam utas selain daripada utas utama. Proses khusus menggunakan fungsi std::async adalah seperti berikut:

1 Cipta tugas tak segerak: std:: objek masa hadapan.

2. Untuk menjalankan fungsi dalam tugas tak segerak, gunakan fungsi std::async untuk menentukan fungsi dan parameter.

3. Laksanakan tugasan lain dalam utas utama dan tunggu tugas tak segerak selesai sebelum mendapat keputusan.

Ini adalah kod sampel:

// termasuk fail header

include & lt; masa depan & gt;

include & lt; iostream & gt;

// tugas asynchronous
int foo (int x) {

return x * x; 
e

}

//Fungsi utama
int main() {

//创建异步任务 
std::future<int> result = std::async(foo,2);

//在此期间执行其他任务 
std::cout << "Main Task Finished" << std::endl;

//等待异步任务完成 
int r = result.get();

//输出异步任务结果 
std::cout << "Result is " << r << std::endl;

}

Perlu diperhatikan bahawa apabila menunggu tugas tak segerak selesai dalam utas utama, utas utama akan disekat. Oleh itu, kita boleh menggunakan salah satu jenis enumerasi std::future_status, iaitu std::future_status::ready, untuk mengesan sama ada tugas tak segerak selesai, seperti berikut:

//Kesan sama ada tugas tak segerak selesai
jika ( result.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {

//异步任务已完成

}

Selain itu, kita juga boleh menggunakan std::promise dan std::future bersama-sama, Untuk memenuhi keperluan pengaturcaraan tak segerak yang lebih terperinci. Contohnya, dalam pengaturcaraan berbilang benang, kita mungkin perlu menunggu satu utas selesai sebelum melaksanakan tugasan lain Pada masa ini, kita boleh menggunakan std::promise dan std::future untuk melaksanakan mekanisme semaphore:

//. Mengandungi fail Pengepala

sertakan

sertakan

sertakan

sertakan

;

batal>& p ) {

std::this_thread::sleep_for(std::chrono::seconds(2)); //模拟长时间的任务
p.set_value(); //使用set_value()将结果返回给主线程 

}

//Fungsi utama

int main() {

//创建promise对象 
std::promise<void> p; 

//获取future对象 
std::future<void> f = p.get_future();

//在单独的线程中运行异步任务 
std::thread t(foo, std::ref(p));

//在此期间执行其他任务
std::cout << "Main Task Started" << std::endl;

//等待异步任务完成 
f.wait();

//输出结果 
std::cout << "Main Task Finished" << std::endl;

//等待异步线程完成 
t.join();

}

Dalam contoh ini, kami menggunakan std::promise untuk menghantar nilai semaphore (iaitu tidak sah) ke benang tak segerak, Selepas utas tak segerak menyelesaikan tugas, gunakan fungsi set_value() untuk mengembalikan nilai semaphore kepada utas utama. Benang utama perlu menunggu benang tak segerak selesai sebelum ia boleh meneruskan pelaksanaan.

Ringkasan

Pengaturcaraan tak segerak ialah kemahiran penting dalam pengaturcaraan C++, yang boleh meningkatkan prestasi keseluruhan dan keselarasan program. Dalam artikel ini, kami memperkenalkan prinsip asas pengaturcaraan tak segerak dalam C++ dan menunjukkan beberapa kod contoh yang berkaitan. Jika anda ingin meningkatkan prestasi program anda atau perlu melakukan pengaturcaraan berbilang benang, kemahiran pengaturcaraan tak segerak ialah salah satu teknologi teras yang perlu anda kuasai.

Atas ialah kandungan terperinci Teknik pengaturcaraan tak segerak dalam 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