Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading nw_pthread_create和pthread_create之间有什么区别?_Multithreading_Pthreads_Qnx_Qnx Neutrino - Fatal编程技术网

Multithreading nw_pthread_create和pthread_create之间有什么区别?

Multithreading nw_pthread_create和pthread_create之间有什么区别?,multithreading,pthreads,qnx,qnx-neutrino,Multithreading,Pthreads,Qnx,Qnx Neutrino,这是一个特定于QNX的线程实现。我正在为QNX平台开发wifi驱动程序。回答我自己的问题-来自QNX.com的文本- 线程创建 io pkt实例中可以存在几种类型的线程。驱动程序或模块开发人员从上面创建的两种类型的线程是用户创建的线程,它们由io pkt跟踪nw_pthread_create或不跟踪pthread_create。不管它们是如何创建的,在io pkt中创建的所有POSIX线程都应该命名,以便于调试 未追踪螺纹- 您应该处理未跟踪线程的唯一时间是使用为其提供的服务创建线程的库。USB

这是一个特定于QNX的线程实现。我正在为QNX平台开发wifi驱动程序。

回答我自己的问题-来自QNX.com的文本-

线程创建

io pkt实例中可以存在几种类型的线程。驱动程序或模块开发人员从上面创建的两种类型的线程是用户创建的线程,它们由io pkt跟踪nw_pthread_create或不跟踪pthread_create。不管它们是如何创建的,在io pkt中创建的所有POSIX线程都应该命名,以便于调试

未追踪螺纹-

您应该处理未跟踪线程的唯一时间是使用为其提供的服务创建线程的库。USB堆栈库libusbdi就是一个例子,它可以创建一个线程来调用用户提供的回调函数来处理设备的插入和删除。 如果您的代码直接创建线程,那么您应该创建一个跟踪线程,如下所述。如果要调用代表您创建线程的库函数,则必须在模块代码中管理这些线程,因为io pkt不知道它们的存在。如io pkt体系结构部分所述,未跟踪的线程不能分配或释放mbuf或集群,也不能调用执行堆栈上下文伪线程操作的函数

跟踪线程-

如果要在io pkt模块中创建线程,应始终使用nw_pthread_create而不是pthread_create。nw_pthread_create函数创建一个由io pkt跟踪的线程。这允许线程分配和释放mbuf和集群内存缓冲区,还提供了一种同步机制,即静止功能,它可以阻止所有io pkt跟踪的POSIX线程进行独占操作,或者在关机时使这些线程退出。 所有跟踪的POSIX线程都必须注册下面定义的静止回调函数。如果线程没有注册静止回调函数,io pkt可能会最终陷入死锁状态