Rumah >pembangunan bahagian belakang >C++ >Pengaturcaraan Serentak C++: Bagaimana untuk menguruskan peruntukan sumber dalam benang selari?

Pengaturcaraan Serentak C++: Bagaimana untuk menguruskan peruntukan sumber dalam benang selari?

王林
王林asal
2024-05-06 16:15:01377semak imbas

Dalam program berbilang benang, C++ menggunakan kunci mutex dan jenis atom untuk memastikan akses yang betul bagi benang kepada sumber yang dikongsi. Kunci Mutex: Kelas std::mutex mencipta kunci mutex, membenarkan hanya satu utas mengakses sumber kongsi pada satu masa, menghalang perlumbaan data. Jenis atom: std::atomic menyediakan operasi atom untuk menghalang berbilang benang daripada mengubah suai pembolehubah yang sama pada masa yang sama, memastikan keselamatan benang.

Pengaturcaraan Serentak C++: Bagaimana untuk menguruskan peruntukan sumber dalam benang selari?

Pengaturcaraan Serentak C++: Mengurus Peruntukan Sumber dalam Benang Selari

Dalam pengaturcaraan berbilang benang, mengurus peruntukan sumber adalah penting untuk mengelakkan perlumbaan data dan memastikan ketepatan program. C++ menyediakan beberapa mekanisme penyegerakan untuk melaksanakan peruntukan sumber, termasuk kunci mutex dan jenis atom.

1. Kunci Mutex

Kunci mutex ialah mekanisme penyegerakan yang membenarkan hanya satu utas mengakses sumber yang dikongsi pada satu masa. Dalam C++, anda boleh menggunakan kelas std::mutex untuk mencipta kunci mutex. std::mutex类来创建互斥锁。

代码范例:

std::mutex mtx;

void thread_function() {
  std::lock_guard<std::mutex> guard(mtx);
  // 对共享资源进行操作
}

在这个示例中,std::lock_guard是一个RAII(资源获取即初始化)包装器,它在函数作用域的生存期内锁定互斥锁。

2. 原子类型

原子类型是线程安全的内置类型,可以执行原子操作。它们防止多个线程同时修改同一个变量,从而避免数据竞争。C++标准库提供了一些原子类型,如std::atomic<t></t>

Contoh Kod:

std::atomic<int> counter;

void thread_function() {
  counter++; // 执行原子增量操作
}

Dalam contoh ini, std::lock_guard ialah pembalut RAII (Resource Acquisition i.e. Initialization) yang mengunci mutex untuk seumur hidup Lock skop fungsi.

2. Jenis atom

Jenis atom ialah jenis terbina dalam selamat benang yang boleh melakukan operasi atom. Mereka menghalang berbilang benang daripada mengubah suai pembolehubah yang sama pada masa yang sama, dengan itu mengelakkan perlumbaan data. Pustaka standard C++ menyediakan beberapa jenis atom, seperti std::atomic<t></t>.

Contoh Kod:

std::mutex mtx;
std::queue<int> queue;

void producer_thread() {
  while (true) {
    std::lock_guard<std::mutex> guard(mtx);
    queue.push(rand());
  }
}

void consumer_thread() {
  while (true) {
    std::lock_guard<std::mutex> guard(mtx);
    if (!queue.empty()) {
      std::cout << queue.front() << std::endl;
      queue.pop();
    }
  }
}

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

🎜Kes Praktikal🎜🎜🎜Pertimbangkan masalah pengeluar-pengguna di mana urutan pengeluar menjana data dan urutan pengguna menggunakan data. Sumber ialah baris gilir kongsi yang perlu dilindungi oleh mutex untuk mengelakkan perlumbaan data. 🎜🎜🎜Contoh Kod: 🎜🎜rrreee🎜Dalam contoh ini, mutex digunakan untuk melindungi baris gilir dikongsi untuk menghalang benang pengeluar dan pengguna daripada mengakses baris gilir pada masa yang sama. 🎜

Atas ialah kandungan terperinci Pengaturcaraan Serentak C++: Bagaimana untuk menguruskan peruntukan sumber dalam benang selari?. 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