【发布时间】:2013-12-02 06:03:42
【问题描述】:
我一直在使用一个简单的双线程应用程序,其中两个线程同时运行。每个线程将图形(三角形/矩形)绘制到屏幕的预定义且互斥的部分。也就是说,两个线程永远不会在彼此的屏幕空间中写入。
程序运行了很长时间,比如说5个小时左右,主线程一直在运行,但是另一个线程却死机了(虽然它没有死)。
我在 backtrace o/p 中得到了这个,我猜这显示了一个死锁。
Thread 2 (Thread 0xb542f440 (LWP 2142)):
#0 0xb6e83258 in __lll_lock_wait ()
from /lib/arm-linux-gnueabihf/libpthread.so.0
#1 0xb6e7de38 in pthread_mutex_lock ()
from /lib/arm-linux-gnueabihf/libpthread.so.0
#2 0xb6ef8de4 in SDL_mutexP ()
from /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0
#3 0xb6ef4058 in ?? () from /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0
#4 0xb6ef4058 in ?? () from /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
真的是 libSDL1.2 的问题吗?我是否必须为我正在做的每个 SDL_Blit/或其他使用 SDL 的操作编写明确的用户定义互斥锁?还是我缺少其他东西?我该如何解决这个问题?
我正在使用:
Raspberry Pi 中可用的 libSDL1.2
libPthreads
libSDL_ttf
编辑:线程 2 互斥锁的 gdb 跟踪:
(gdb) p *(pthread_mutex_t*) 0xb542ed38 $3 = {_数据 = {_lock = 39257160, __count = 1048617, __owner = 0, __kind = 7078021,_nusers = 0,{_spins = 0,_list = {_next = 0x0}}}, __size = "H\004W\002)\000\020\000\000\000\000\000\205\000l\000\000\000\000\000\000\000\000", __align = 39257160}
如果您需要更多信息,请告诉我。
【问题讨论】:
标签: c multithreading sdl