Использование функции обратного вызова в Кассандре

Я хотел получить предложения относительно правильного способа реализации функций обратного вызова в Cassandra.

Я сделал несколько API, используя драйвер Cassandra C ++. Ниже приведено, как я использовал функцию обратного вызова для выполнения моего запроса (l_stmt — подготовленный оператор, а rtInsertCallback — функция обратного вызова):

            CassFuture * l_query_future = cass_session_execute(RtConnectionObj::ms_session, l_stmt);
CassError l_returnCode = cass_future_set_callback(l_query_future,rtInsertCallback,NULL);
if(l_returnCode != CASS_OK)
{

printf("\n [ %s::%d ] Error \n",__FILE__,__LINE__);

}cass_future_free(l_query_future);

Предполагая, что приведенный выше код выполняется в потоке 1, в соответствии с моим текущим пониманием, функция обратного вызова будет выполняться, когда будет установлено будущее, и то же самое в отдельном потоке (поток 2). Функция обратного вызова выглядит следующим образом:

void rtInsertCallback(CassFuture* l_csp_future, void *data)
{
CassError l_returnCode = cass_future_error_code(l_csp_future);
if (l_returnCode != CASS_OK)
{
printf("\n[%s::%d] %s ",__FILE__,__LINE__,cass_error_desc(l_returnCode));
}
else
{
printf("\n [%s::%d] Data Inserted successfully ...",__FILE__,__LINE__);
}
}

Я хочу знать, возможно ли, что до того, как будет установлено будущее или до того, как CassError l_returnCode = cass_future_error_code(l_csp_future); оператор выполняется в потоке 2, будущее освобождается потоком 1, из-за чего вышеприведенный оператор в потоке 2 будет работать в освобожденном будущем? Если да, то каким должен быть правильный способ обработки такого сценария? Если этот вопрос не имеет никакого смысла (из-за моего неправильного понимания какой-либо концепции), пожалуйста, объясните. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]