Разделение потоков и процессов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть одно приложение в этом основном потоке:

приложение начинает

  1. создание разделяемой памяти и затем инициализация семафора
  2. создание p1, затем p2затем поток p3
  3. создает новый процесс с помощью fork ()
  4. В дочернем процессе fork выполняется некоторая работа с общими ресурсами, а родительский ожидает, а затем завершает процесс и снова вызывает fork (), и этот процесс повторяется, продолжается.
  5. В одном потоке некоторая работа выполняется на одних и тех же общих ресурсах.
  6. используется для предоставления семафоров синхронизации, которые считываются из разделяемой памяти через дочерний элемент и поток.
  7. Наблюдениеоба они получают ресурс одновременно.

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.

...