Sinkronkan dua proses C++ menggunakan perpustakaan bersama

Saya sedang mengembangkan kelas C++ (MyClass.cpp) yang akan saya kompilasi sebagai perpustakaan bersama yang dinamis (MyClass.so).

Pustaka bersama ini akan digunakan oleh dua aplikasi berbeda yang berjalan di mesin Linux yang sama.

Itu adalah dua aplikasi yang berbeda. Ini bukan aplikasi multithread, juga tidak bisa.

Pada kelas ini terdapat metode MyClass::WriteHardware yang harus dijalankan dengan mutualclusion, sehingga tidak mungkin kedua aplikasi tersebut dapat dijalankan secara bersamaan.

Apa cara yang benar dan paling sederhana untuk mencapai sinkronisasi antara dua proses yang berbeda, mengingat perpustakaan MyClass.so umum untuk keduanya?

Akankah mutex berfungsi dalam kasus ini, karena ini bukan aplikasi multithread?


person jstechg    schedule 04.05.2020    source sumber
comment
Platform/OS yang mana? Konsep suatu proses tidak didefinisikan dalam standar C++, jadi cara melakukannya bergantung pada platform.   -  person PeterT    schedule 04.05.2020


Jawaban (2)


Buat MyClass::WriteHardware Anda menulis file "batch" dengan aplikasi yang memerlukan fungsi ini dan dalam urutan yang benar.
Setelah pekerjaan selesai, hapus pekerjaan tersebut dari file.

Fungsi ini memeriksa file untuk melihat apakah file dapat melakukan tugasnya atau harus menunggu aplikasi lain selesai.

Untuk mencegah beberapa aplikasi menulis ke file ini sekaligus, Anda dapat menggunakan file "kunci" lain. Keberadaannya berarti "seseorang sedang menulis ke file batch"

person Ripi2    schedule 04.05.2020

Saya sarankan menggunakan kunci perangkat keras. Misalnya di dalam MyClass::WriteHardware Anda, gunakan objek perangkat keras lain (yaitu file sederhana) sebagai monitor untuk kunci Anda. Jadi MyClass::WriteHardware harus terlebih dahulu memeriksa apakah file monitor Anda dapat diperoleh dengan akses tulis, dan kemudian melakukan tugasnya sambil tetap menahan kunci untuk file monitor tersebut, dan kemudian melepaskannya setelah selesai dengan tugas utamanya.

person Hack06    schedule 04.05.2020