关于“管程属于语言特性,由编译器提供支持,c语言不支持它”的理解
匿名2023/07/31 19:49:39提问
    lecture18student
366

管程是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源。在Java程序设计语言中,每个对象都可以作为一个管程。需要互斥使用的方法必须明确标示关键字synchronized。代码块也可以标示关键字synchronized。这种方法已经被其它程序设计语言使用,如C#。但C语言没有在语言层面有类似sync关键字的支持和对producure的自动lock/unlock等扩展,需要在procedure中由程序员手写 lock, unlock等各种细节。 所以我们可理解C没有管程的语言支持。

有同学提到IOS系统中C语言中可以使用的dispatch(GCD)同步机制,以及pthread库,他们都属于用户态的library的支持,而不是C语言级的支持。其中的dispatch是一个很强大的队列管理库,它能够支持实现信号量机制; pthread可以通过pthread_cond_init,pthread_cond_signal,pthread_cond_wait来实现条件变量的创建,释放,等待,但是也只能够支持到CV层级,依旧不能算是管程的语言支持。

感兴趣的同学可以参见我在 https://piazza.com/class/i5j09fnsl7k5x0?cid=391 上的关于生产消费者问题、读者写者问题的信号量,管程实现,以了解pthread以及dispatch机制的具体实现

回答(0
    推荐问答
      Simple Empty
      暂无数据