这是针对线程的QNX特定实现。我正在为QNX平台开发一个wifi驱动程序。
答案 0 :(得分:0)
回答我自己的问题 - 来自qnx.com的文字 - http://www.qnx.com/developers/docs/660/index.jsp?topic=%2Fcom.qnx.doc.core_networking.user_guide%2Ftopic%2Fnative_drvr_extra.html&resultof=%22nw_pthread_create%22%20
线程创建
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可能会陷入死锁状态。