c - C是单线程语言吗
问题描述
我最近在阅读 Ritchie 的“The C Programming language”,我注意到 C 是一种单线程语言。好吧,我想知道单线程语言和多线程语言之间实际上有什么区别。如果C是单线程的,那么它是异步的还是同步的?
解决方案
C 编程语言现在是一种标准,因此请阅读C11规范,即n1570。请记住,编程语言是一种规范(在某些技术报告中如此定义)而不是软件。Ritchie 的书是关于 C 的旧版本(写于 1980 年代,当时不存在多核计算机和多线程,或者非常不寻常,Ritchie 本人没有任何这样的计算机或系统)。C 标准(松散地)定义了 C 实现的行为(未定义的行为在其中是一个非常重要且棘手的概念)。
C11 中有一些线程支持。
您还可以将 C99(甚至 C11)与一些提供线程的外部库(例如 POSIX 上的pthreads )一起使用。
您可以将线程(以及进程和文件)视为操作系统提供的某些功能或抽象。语言规范通常不会提供太多关于它们的信息(例如,大多数操作系统都有目录,但 C 标准没有提供任何关于这些的信息)。
实际上,如果您仔细阅读 C11 标准,您可能会注意到它甚至不需要(只是隐含地包含)计算机硬件。原则上,C 实现可以是一组人(并且“在教室里运行 C 程序,被视为计算机”是教授 C 的好方法)。在实践中,使用人类奴隶作为 C 实现是不道德且低效的,您应该更喜欢一些计算机(但 C11 标准没有定义什么是计算机)。
推荐阅读
- sapb1 - SAP B1 中的自定义选项卡内容不变
- swift - 设置日期和时间不显示在 textField / Swift
- html - 用 Header 制作一个盒子
- postgresql - Postgres全文搜索提取匹配项
- python - 使用 Pip 安装模块时出错
- flutter - 库 'package:flutter/material.dart' 是遗留的,不应导入到 null 安全库中
- c++ - 为什么缓存命中比缓存未命中需要更多时间?
- xml - 如何在不重复自己的情况下重复 XML 代码代码?保持我的 XML DRY
- javascript - 如何根据来自它们的排序索引目标数组在javascript中对多个数组进行排序(有效)
- android - 如何使用启动模式和活动别名删除除根活动之外的所有活动?