Вопрос по android – Android: синхронизация собственного потока с основным потоком

2

В моем приложении для Android я получил обратный вызов из нативного потока в код Java, который должен быть синхронизирован с основным потоком пользовательского интерфейса. Предполагается, что поток пользовательского интерфейса отображает список параметров на основе информации, возвращаемой из собственного потока. Пока пользователь не выберет опцию, нить должна быть заблокирована. После того, как пользователь выбирает опцию, собственный поток считывает значение и продолжает работать.

Я пытался реализовать это решение, используя ConditionVariable, однако я получаю сообщение об ошибке виртуальной машины с комментарием, указывающим на "Fatal spin-on-suspend, dumping threads".

Похоже, что невозможно использовать объект синхронизации на основе Java для синхронизации этих потоков. Код прекрасно работает в случае, когда у меня есть два потока Java.

В общем, есть ли способ использовать объект синхронизации на основе Java для синхронизации Java и собственного потока, или это необходимо реализовать с помощью NDK с вызовом из потока Java в функцию NDK, которая реализует синхронизацию?

Ваш Ответ

1   ответ
2

а скорее объект синхронизации на основе NDK следующим образом:

static pthread_cond_t  uiConditionVariable  = PTHREAD_COND_INITIALIZER;
static pthread_mutex_t uiConditionMutex     = PTHREAD_MUTEX_INITIALIZER;



/**
 * This function opens the condition variable which releases waiting threads.
 */
JNIEXPORT void JNICALL
Java_com_Xxxx_openConditionVariable(JNIEnv *env,jobject o)
{
    pthread_mutex_lock(&uiConditionMutex);
    pthread_cond_signal(&uiConditionVariable);
    pthread_mutex_unlock(&uiConditionMutex);
}

/**
 * This function blocks on the condition variable associated with the 
 */
JNIEXPORT void JNICALL
Java_com_Xxxx_blockConditionVariable(JNIEnv *env,jobject o)
{
    pthread_mutex_lock(&uiConditionMutex);
    pthread_cond_wait(&uiConditionVariable,&uiConditionMutex);
    pthread_mutex_unlock(&uiConditionMutex);
}

Похожие вопросы