В итоге я использовал условные и мьютексные типы данных pthread, мне пришлось настроить их как общие объекты (создать их в общей памяти и настроить их атрибуты). Пример кода инициализации.
Код для инициализации pthread_mutexattr_t:
pthread_mutexattr_t get_mutex_attributes() {
pthread_mutexattr_t mattr;
pthread_mutexattr_init(&mattr);
// Attribute to allow the mutex to be shared between processes
pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
return mattr;
}
Эта функция создает атрибуты для инициализации блокировки мьютекса как PTHREAD_PROCESS_SHARED
, позволяя нескольким процессам использовать блокировку
Затем используйте эту функцию для создания общей памяти:
void *create_shared_memory(size_t size) {
int protection = PROT_READ | PROT_WRITE;
int flags = MAP_SHARED | MAP_ANONYMOUS | MAP_SYNC;
return mmap(NULL, size, protection, flags, -1, 0);
}
и инициализации мьютекса:
mut_allt = (pthread_mutex_t *) create_shared_memory(sizeof(pthread_mutex_t));
pthread_mutex_init(mut_allt, &mattr);
Со всем этим и некоторыми условными мьютексами мне удается синхронизировать процессы то, что мешало мне использовать условные выражения pthread и мьютекс, было то, что я не настраивал их должным образом. Надеюсь, это кому-нибудь поможет!