我对线程和操作系统构造不太熟悉,
想知道一些问题的答案。
在C语言中实现线程时,你可以使用POSIX线程,那么POSIX线程是操作系统级别的线程吗?是否在内核级别运行?
在Java中创建和运行线程时,这些都是用户级别的线程吗?我们在Java中对操作系统级别构造有哪些访问权限?在Java中的信号量只是在用户空间设置的吗?
感谢您提供任何关于这些问题的见解。
我对线程和操作系统构造不太熟悉,
想知道一些问题的答案。
在C语言中实现线程时,你可以使用POSIX线程,那么POSIX线程是操作系统级别的线程吗?是否在内核级别运行?
在Java中创建和运行线程时,这些都是用户级别的线程吗?我们在Java中对操作系统级别构造有哪些访问权限?在Java中的信号量只是在用户空间设置的吗?
感谢您提供任何关于这些问题的见解。
POSIX线程是内核线程。内核线程是“普通”的线程;如果您在C语言中使用用户线程,那么您必须自己编写整个线程系统。
Java线程通常也是内核线程。在类Unix系统上,它们可能使用POSIX线程;在Windows上,它们使用Windows线程。可以想象,在没有线程的系统上有一个JVM,并且它自己实现线程(作为用户线程)。
补充一下@user253751的回答,通常使用pthread库创建的线程是(基本上)内核线程的另一个指示是由于传递给pthread_create
的第二个参数的值。这个API的常见(但不强制)用法将以attr
参数为NULL的方式进行,这意味着该线程将是内核(感知)线程。
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void *),
void *restrict arg);