多线程是操作系统的功能,这不是C语言要做的事。 C语言是用最简洁的语法来实现任意复杂的功能,包括让操作系统实现多线程支持。 “C语言本身不支持多线程,所以不能实现多线程“ 这种概念是错误的。 这就好比C语言本身虽然不支持“面向对象”和“模板”,但却可以用C来实际实现“面向对象”和“模板”。比如GTK+就是完全用C写出了“面向对象”编程的模式,包括实现类的继承;而gmp库,虽然是用C、汇编编写的,但大量使用来C方式的模板。 有些C标准库的函数在最初设计时可能不是线程安全的,这是因为在这些库最初写成的时候,还没发明出多线程的概念,由于在实现时使用了很多全局变量,加上函数声明的限制,后期也很难引入对多线程的支持。 比如rand()函数,早期使用了一个全局变量做为种子,所以该函数在多线程环境下一定是不安全的,由于该函数不附带任何参数,因此也无法简单的将其改成支持多线程。为了支持多线程,后期只能另外引入一个rand_r()函数,多传递一个参数来用于同步。 也就是说,不是C不支持多线程,而是C的标准库中的一些函数未必支持多线程。这需要C程序员在多线程编程下自己格外注意这些库函数的使用,避免因为误用了某些多线程不安全的库函数而造成不可预知的后果。
线程的原理是把多个同时跑的代码段放在内核创建的一个队列中,快速的循环执行,从最底层来讲线程不可能是同步的。从应用层看一般都认为线程是同步的。应该就是这样理解吧。
69,336
社区成员
243,078
社区内容
加载中
试试用AI创作助手写篇文章吧