2010-09-30 66 views
6

我需要在C中进行一些进程同步。我想使用监视器,并且我已经阅读了很多关于它们的内容。然而,我一直无法找到如何在C中实现一个。我已经看到他们在Java和其他语言如C++中完成,但我无法在C中找到示例。如何在C中编写监视器?

我已经查看了K & R和那里没有例子。我通过Unix系统编程,通信,并发和线程浏览过,但无法在那里找到监视器实现。

这把我带到这里。我在哪里以及如何定义显示器?我如何在其他代码中实现它?

/*我在* nix的环境*/

回答

5

我这样做是最近的一个项目我编码,我实现了这个概念是有一个线程启动所有的人,然后使用信号量和互斥来控制在处理共享内存时,进程间同步问题。

在显示器设计模式的背景下,显示器的概念是一种基本上可以隐藏相互冲突的结构。这个概念用C++ Boost表达,但在核心C++或C中不存在。您在C中处理这种类型的作业的方式是使用良好的老式互斥体(二进制信号量)和信号量。您可以阅读关于此here的更多信息。

下面是初始化信号量和互斥量的基本方法,您可能需要做一些阅读以了解如何以及何时使用它们中的每一个,因为这里有点长,但是here是获取链接你开始了。

pthread_mutex_t myMutex; 
sem_t mySemaphore; 
int status; 
    status = pthread_mutex_init(&myMutex, NULL); 
    if(status != 0) 
     exit_with_error("There was an Error Initalizing the Mutex\n"); 
    status = sem_init(&mySemaphore, 0, 0); 
    if(status != 0) 
     printf("There was an Error Initalizing the Semaphore\n"); 
+0

此实现是通过函数?我已经看到了一些次要的代码,例如:monitor network {/ * code and conditions in here * /}。是伪代码还是显示器的关键字/数据结构呢? – 2010-09-30 04:17:23

+0

我已经淘汰了我的监控功能,并用更直接的答案替换了它。如果你想回复这段代码,只需告诉我,我只是重新阅读你的问题,并看到它不是你所要求的。在你上面的评论中,你提到的代码是伪代码,据我所知,构造不存在于C中。 – JonVD 2010-09-30 04:27:00

+0

谢谢,我想我会尝试通过带有信号灯的main函数来实现我的,并尝试用它来监视各种线程。我需要阅读更多关于这个话题的内容,这很复杂。 – 2010-09-30 04:31:42