Как использовать libuv Async потокобезопасных?

102
6

uv_async_send является потокобезопасным, но uv_async_init не является потокобезопасным. Если uv_async_init и ящик aysnc обрабатывают в потоке циклов, возможно, я вызову uv_async_send много раз, но обратный вызов будет вызван только один раз (мне нужно, чтобы обратный вызов вызывался в те же моменты, когда я вызываю uv_async_send).

но это не безопасно, когда я создаю асинхронный дескриптор для каждого обратного вызова в другом потоке. Итак, как использовать libuv потокобезопасных?

http://docs.libuv.org/en/v1.x/async.html?highlight=uv_async_init

спросил(а) 2019-02-21T12:17:00+03:00 1 год, 11 месяцев назад
1
Решение
118

uv_async_init не является потокобезопасным… это не безопасно, когда я создаю асинхронный дескриптор для каждого обратного вызова в другом потоке… я могу создать асинхронный дескриптор в потоке цикла

Похоже, вы неправильно поняли термин "безопасный поток". Это не означает, что вы не можете вызывать uv_async_init() из потока, отличного от потока цикла. Это просто означает, что вы не можете вызывать его из нескольких потоков параллельно (без блокировки).

ответил(а) 2019-02-22T15:50:00+03:00 1 год, 11 месяцев назад
42

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

ответил(а) 2019-02-21T12:46:00+03:00 1 год, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема