0

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

4

1 回答 1

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 线程都必须注册一个静默回调函数(定义如下)。如果您的线程没有注册 quiesce 回调函数,io-pkt 可能会陷入死锁状态。

于 2014-03-26T20:33:43.203 回答