本人一直有个问题弄不懂,C是不支持多线程的,Linux内核是C标准写的,那它怎么支持多线程呢?

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明本人一直有个问题弄不懂,C是不支持多线程的,Linux内核是C标准写的,那它怎么支持多线程呢?
喜欢 (0)
[1034331897@qq.com]
分享 (0)