2015-02-16 4 views
1

Я пишу плагин для игры под названием Rust с использованием рамки моддинга под названием Oxide. Мне интересно, нужно ли мне беспокоиться о синхронизации в моем плагине. Все сценарии в единстве (C# или иначе) выполнены в одном потоке?Безопасность потоков в сценариях C#

+1

http://answers.unity3d.com/questions/180243/threading-in-unity.html. По сути Unity API не может быть потокобезопасным, но нет ничего, что помешает вам создавать собственные потоки для ваших собственных целей. – MickyD

ответ

3

Да, все они исполняются на главной теме, на самом деле единство действительно не нравится, когда вы пытаетесь делать что-то с основной нитью. Любые специальные вызовы Unity3D, которые вы делаете (что-либо в любом из пространств имен Unity), должны выполняться в основном потоке, иначе вы получите потенциально очень неопределенные ошибки, а когда ошибки происходят за пределами основного потока, единство не сообщит об этом и не будет предоставлять трассировка стека.

Они способствуют тому, что большинство людей сталкиваются с mutlithreading с Unity, чтобы создать объект MonoBehaviour, который запускает обработку, которая не включает единство непосредственно в другом потоке, а затем сохраняет ее в объекте MonoBehaviour, когда это делается. Затем объект MonoBehaviour может проверять каждое обновление, чтобы убедиться, что нужные ему данные готовы к тому, чтобы сделать единичные конкретные вызовы, а затем сделать это, если они готовы.

+1

Удивительно, вот что я надеялся. У меня нет желания делать многопоточность, я просто привык работать в многопоточных серверных средах и изначально предполагал, что мне придется беспокоиться о синхронизации. Благодаря! –

Смежные вопросы