Синхронизация потоков (выполнение процедуры в основном контексте)

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация потоков (выполнение процедуры в основном контексте)

Post by buniak_a_h »

Здравствуйте!
Мне сейчас кажется, что когда-то я видел в документации механизм синхронизации параллельно выполняющихся веток lua-скрипта путём выполнения некоего кода в контексте основного потока. Даже сейчас в документации остались следы: упоминается некая функция export.ProcessSynchroEvent (отсутствующая в таблице export). Увы, теперь я не могу найти той статья в документации.
1. Не могли бы вы подсказать, что я такое видел (дать ссылочку)?
2. Если мне это приглючилось - не могли бы вы рассказать, как сейчас организовать синхронизацию параллельных потоков (запущенных по coroutine.create? Может быть, у кого-нить есть работающий пример скрипта, выполняющего параллельные ветки и синхронизирующего их? Без использования far.Timer(…)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Синхронизация потоков (выполнение процедуры в основном контексте)

Post by John Doe »

Во-первых надо понимать, что и корутины, и функции по таймеру, выполняются в рамках основного потока, поэтому 'параллельность' тут очень условная.
В луа конечно возможна и настоящая многопоточность, но из коробки средств для этого нет (не считая ffi). Т.е., если мы конечно не хотим изобретать велосипед, то требуются специализированные библиотеки.

Что до ProcessSynchroEvent, то в луа её отражает именно функция far.Timer, поэтому неясно почему вам требуется её избегать.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация потоков (выполнение процедуры в основном контексте)

Post by buniak_a_h »

John Doe wrote: Mon 23 Nov, 2020 14:35 Во-первых надо понимать, что и корутины, и функции по таймеру, выполняются в рамках основного потока
Спасибо. Это практически разрушает мою идею, но ffi подключать не буду.
John Doe wrote: Mon 23 Nov, 2020 14:35 неясно почему вам требуется её избегать
Не-не, не требуется. Просто мне казалось, что запрограммировать так, как под спойлером описано, проще. А, как известно, чем проще, тем эффективнее.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Синхронизация потоков (выполнение процедуры в основном контексте)

Post by John Doe »

'В фоне' читать вполне здравая мысль. Да, это будет всё равно в основном потоке, поэтому периодически надо прерываться и отдавать управление фару.
far.Timer всё синхронизирует самостоятельно.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Нужна помощь”