C语言中是否有监视器?

7
我正在阅读操作系统中的同步章节,正在阅读“监视器”这个主题。我理解监视器是高级语言构造。这让我想知道C是否提供类似监视器的东西?也许包含posix线程实现的库也应该提供监视器构造。此外,C中的线程不是stl的一部分,对吗?
如果是的话,哪个头文件/库包含它,一个最基本的测试程序来使用监视器以及库如何实现监视器。
这本书说监视器类型是ADT - 抽象数据类型。我想知道C结构是否模拟监视器数据类型?
谢谢,

4
STL 不是为 C 设计的,而是为 C++ 设计的。它们非常不同。不要听任何人告诉你相反的说法。 - Chris Lutz
好的,C语言中标准化的库(如果有的话)叫什么?实际上我在C++的上下文中读到了STL,并且认为在C中也可能会有一个STL..(尽管STL中的模板让我有点困惑) - xyz
2
C语言中唯一的标准库是C标准库(而C++中唯一的标准库是C++标准库,其中包括一个标准模板库,但不是唯一使用该名称的东西)。 - Chris Lutz
4个回答

12
  • C语言没有线程的概念,也没有提供监视器作为语法结构。

  • POSIX线程库只是一个库。而C语言的抽象能力并不足以允许将监视器作为库元素提供。POSIX提供了构建监视器所需的原语。

  • STL是C++术语(甚至不是很好的术语,因为它对于不同的人意味着不同的事情)。

  • 要在C语言中实现监视器,您需要一个保持私有内容并且至少具有互斥锁的结构,以及一组以获取互斥锁开始操作该结构的函数。


你说“C语言的抽象能力不足以允许监视器作为库元素提供。”这意味着即使是第三方库也不能用C语言编写可以充当监视器的程序吗?但是接下来你又说“要在C语言中实现监视器,你需要一个保持私有的结构体,至少有一个互斥锁,并且一组操作该结构体的函数,这些函数首先需要获取互斥锁。”这让我感到困惑。是否可能使用C标准关键字/结构编写支持监视器的库? - xyz
@p2pnode:这更或多或少类似于面向对象编程。你可以用C语言编写监视器。你可以编写一个库来帮助你编写监视器。你不能添加新的语法结构到C语言以创建监视器,但如果你滥用宏,你就可以接近实现。虽然我知道有几个框架可以实现OO编程,但我不知道有哪些框架可以用来编写监视器。 - AProgrammer

2

C语言甚至没有线程支持,这是实现特定的。你需要使用一个库来实现你的监视器。


1

你说得对,线程不是标准C库的一部分。

POSIX线程没有提供专门的监视器,但是您可以使用互斥量加条件变量来完成监视器可以实现的所有操作。或者根据您感兴趣的监视器类型不同,可能需要两个条件变量:http://en.wikipedia.org/wiki/Monitor_%28synchronization%29


0

线程仅在下一个C标准版本中预见,而不是当前版本。当前的提案非常类似于POSIX线程的功能,例如互斥锁和条件变量作为控制结构。据我所知,监视器不在其中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接