use*_*816 10 c unix multithreading systems-programming
我想在不使用任何POSIX库的情况下在C中实现多线程.任何帮助,将不胜感激.
不:不要使用fork()或vfork().
iab*_*der 13
Linux中的线程本质上是一个与其父级共享内存和资源的进程.的Linux内核并没有一个进程和线程区别,换句话说,有一个没有概念,轻量的Linux进程像其他一些操作系统.Linux中的线程是作为标准进程实现的,因此可以使用clone()通常fork()以下列方式调用的线程来创建线程:
clone(SIGCHLD, 0);
Run Code Online (Sandbox Code Playgroud)
这只会克隆信号处理程序,但是,使用适当的标志可以创建一个线程:
clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND, 0);
Run Code Online (Sandbox Code Playgroud)
这与前一个调用相同,只是地址空间,文件系统资源,文件描述符和信号处理程序由两个进程共享.
另一种方法是使用用户级线程(也称为光纤),这些线程是在用户级实现的执行线程,这意味着操作系统不知道这些线程,并且必须在用户处完成调度或上下文切换 -水平.大多数用户级调度程序都实现为协作调度程序,但也可以使用简单的循环调度来实现抢占式调度程序 .
查看clone(2)手册页了解详细信息,如果您想了解更多信息,我推荐Linux内核开发第3版作者:Robert Love,(不以任何方式与作者有关)有一个内部链接,你可以阅读其中的一些内容线上.对于用户级线程,有一个由我编写的最小包,称为libutask,它实现了一个协作和一个抢占式调度程序,你可以根据需要检查源代码.
注1:据我所知,我没有提到UNIX,这是特定于Linux的实现.
注意2:使用clone创建自己的线程不是一个真实的解决方案,请阅读您可能需要处理的一些问题的注释,这只是问题的答案是可以在不使用pthread的情况下创建线程,在这种情况下答案是肯定的.
| 归档时间: |
|
| 查看次数: |
8374 次 |
| 最近记录: |