[英]ConditionVariable prevents both threads from running simultaneously
我正在嘗試出於游戲編程目的在一對Android線程之間強制執行同步。 我分配了一個游戲線程來處理大多數任務,並分配了一個渲染線程,負責交換緩沖區和渲染。 當我第一次詢問線程同步時,我將ConditionVariable對象稱為一種有用的工具,可以強制線程阻塞直到並發任務完成。
我的源代碼如下所示:
...
final ConditionVariable bufferLock = new ConditionVariable();
final ConditionVariable cycleLock = new ConditionVariable();
bufferLock.open();
cycleLock.open();
Runnable bufferSwapTask = new Runnable()
{
public void run()
{
swapBuffers();
bufferLock.open();
}
};
Runnable renderTask = new Runnable()
{
public void run()
{
Log.d(TAG, "drawAll");
drawAll();
cycleLock.open();
}
};
while(!halt)
{
if(!init)
{
synchronized (userInputLock)
{
fetchUserInput();
}
processUserInput();
gameLogic();
bufferLock.block();
cycleLock.close();
renderThreadHandler.post(renderTask);
recycleDisplayObjects();
enqueueDisplayTree();
cycleLock.block();
bufferLock.close();
renderThreadHandler.post(bufferSwapTask);
}
}
...
因此,事情以正確的順序執行,但沒有達到我期望的性能水平。 而且,當我激活DDMS方法跟蹤時,我發現DVM實際上會中斷並阻塞每個線程以允許另一個線程繼續進行,來回切換的方式強烈暗示兩個線程僅由一個CPU處理。
使用ReentrantLocks的同時處理效果很好,為什么ConditionVariable會產生這種效果?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.