首页 > 解决方案 > C是单线程语言吗

问题描述

我最近在阅读 Ritchie 的“The C Programming language”,我注意到 C 是一种单线程语言。好吧,我想知道单线程语言和多线程语言之间实际上有什么区别。如果C是单线程的,那么它是异步的还是同步的?

标签: cmultithreading

解决方案


C 编程语言现在是一种标准,因此请阅读C11规范,即n1570。请记住,编程语言是一种规范(在某些技术报告中如此定义)而不是软件。Ritchie 的书是关于 C 的旧版本(写于 1980 年代,当时不存在多核计算机和多线程,或者非常不寻常,Ritchie 本人没有任何这样的计算机或系统)。C 标准(松散地)定义了 C 实现的行为(未定义的行为在其中是一个非常重要且棘手的概念)。

C11 中有一些线程支持。

您还可以将 C99(甚至 C11)与一些提供线程的外部库(例如 POSIX 上的pthreads )一起使用。

您可以将线程(以及进程和文件)视为操作系统提供的某些功能或抽象。语言规范通常不会提供太多关于它们的信息(例如,大多数操作系统都有目录,但 C 标准没有提供任何关于这些的信息)。

实际上,如果您仔细阅读 C11 标准,您可能会注意到它甚至不需要(只是隐含地包含)计算机硬件。原则上,C 实现可以是一组人(并且“在教室里运行 C 程序,被视为计算机”是教授 C 的好方法)。在实践中,使用人类奴隶作为 C 实现是不道德且低效的,您应该更喜欢一些计算机(但 C11 标准没有定义什么是计算机)。


推荐阅读