我正在运行 vxWorks 6.3 并遇到了问题。我有一系列任务在 RTP 中运行。我创建一个任务,做一些事情然后销毁这个任务。然后创建两个非常接近的任务,做一些事情并销毁它们。这些任务必须做一些疯狂的事情,比如 malloc 和释放内存。不幸的是,如果我这样做的次数足够多,其中一项任务将卡在信号量上的内存(malloc 和 free)例程中。在 free 或 malloc 中,它总是在任务开始时“丢失”的第二个任务。失败后,我仍然可以创建任务,我仍然可以 malloc 内存。失败的任务永远存在,等待信号量......其他任务必须使用的信号量。
有谁知道任务是如何卡在记忆例程中的?
0x08265e58 malloc +0x2c : 0x082416f4 ()
0x08267e50 memPartAlloc +0x28 : 0x08241734 ()
0x08267e0c memPartAlignedAlloc+0x70 : 0x08267c04 ()
0x08267c7c memPartFree +0xfc : 0x08240654 ()
0x082753c0 semTake +0x90 : 0x08242534 ()
0x082752ec semUMTake +0xd8 : 0x08242514 ()
---- system call boundary ----
-> tw 0x69d21b0
NAME ENTRY TID STATUS DELAY OBJ_TYPE OBJ_ID OBJ_NAME
---------- ---------- ---------- ---------- ----- ---------- ---------- --------
tHttp631-2 0x827dbfc 0x69d21b0 PEND 0 SEM_M 0x6859650 N/A
Semaphore Id : 0x6859650
Semaphore Type : MUTEX
Task Queuing : PRIORITY
Pended Tasks : 1
Owner : 0x69d1a08 Deleted!
Options : 0xd SEM_Q_PRIORITY
SEM_DELETE_SAFE
SEM_INVERSION_SAFE
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
Pended Tasks
------------
NAME TID PRI TIMEOUT
---------- -------- --- -------
tHttp631-25502 69d21b0 120 0
value = 0 = 0x0
->