У меня есть одно приложение в этом основном потоке:
приложение начинает
- создание разделяемой памяти и затем инициализация семафора
- создание p1, затем p2затем поток p3
- создает новый процесс с помощью fork ()
- В дочернем процессе fork выполняется некоторая работа с общими ресурсами, а родительский ожидает, а затем завершает процесс и снова вызывает fork (), и этот процесс повторяется, продолжается.
- В одном потоке некоторая работа выполняется на одних и тех же общих ресурсах.
- используется для предоставления семафоров синхронизации, которые считываются из разделяемой памяти через дочерний элемент и поток.
- Наблюдениеоба они получают ресурс одновременно.
Code
Start
{
Shared Memory object for semaphore create;
attach object using shmat.(sem_t sem).
semaphore sem Initialization;
thread P1
{
;
}
thread P2
{
Resource Acquire( sem_wait sem ) ;
do Work;
Resource Release( sem_post sem );
}
thread P3
{
;
}
label1:
fork()
child
{
Resource Acquire( sem_wait sem );
do Work;
Resource Release;( sem_post sem );
// child exits
}
parent
{
sleep till child exit;
goto label1;
}
}
Это основной поток моего приложения.одна и та же переменная sem_t используется дочерним элементом и P2.Также семафор был разделен с использованием общего объекта.Здесь дочерний элемент и поток P2 получают ресурс одновременно
Как заблокировать ресурс, чтобы только один мог получить доступ к ресурсу ??
Даже я также пытался использовать отдельный дочерний элемент вместо потока P2.