线程和进程资源共享

时间:2018-10-04 12:00:16

标签: multithreading multiprocessing semaphore shared-memory

我有一个应用程序,基本流程如下,

开始申请

  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;
    }

}

这是我申请的基础流程。 child和P2使用相同的sem_t变量。信号量也使用共享对象共享。子级和线程P2在这里同时获取资源

如何互锁资源,以便只有一个人可以访问资源?

即使我也尝试了单独的子线程,而不是线程P2。

0 个答案:

没有答案