Как статически скомпилировать игру SDL в Windows

Обзор

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

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

Deeper

Синтаксис ключевого слова synchronized принимает Object как его параметр (называемый объект блокировки ), за которым затем следует { block of code }.

  • Когда выполнение встречает это ключевое слово, текущий поток пытается «заблокировать / приобрести / (возьмите свой выбор) объекта блокировки и выполните соответствующий блок кода после того, как блокировка была получена.
  • Любая запись в переменные внутри синхронизированного блока кода гарантированно будет видна для каждого другого потока, который аналогичным образом выполняет код внутри синхронизированного кодового блока с использованием того же объекта блокировки .
  • Только один поток за раз может удерживать блокировку, за это время все остальные потоки пытаясь приобрести e тот же объект блокировки будет ждать (приостановить их выполнение).

Синхронизированные методы:

Добавление ключевого слова synchronized в определение метода равно всему телу метода завершается в синхронизированном блоке кода с объектом lock , являющимся this (например, методами) и ClassInQuestion.getClass() (для методов класса) .

- Метод экземпляра - это метод, который не имеет ключевого слова static. - Метод класса - это метод, имеющий ключевое слово static.

Technical

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

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

Заключение

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

Источники

http: //docs.oracle.com/javase/specs/jls/se8/html/index.html Спецификация языка Java®, 2015-02-13

blockquote>
14
задан prakash 10 October 2008 в 08:04
поделиться

4 ответа

При компиляции проекта необходимо внести просто пару изменений в make-файл.

  • Вместо sdl-config --libs, используйте sdl-config --static-libs
  • , Окружают использование вышеупомянутого sdl-config --static-libs с -Wl,-Bstatic и -Wl,-Bdynamic. Это говорит GCC вызывать статическое подключение, но только для библиотек, указанных между ними.

, Если Ваш make-файл в настоящее время похож:

SDLLIBS=`sdl-config --libs`

Изменение это к:

SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic

Это на самом деле то же самое, которое Вы должны делать в подобных Unix системах, но это обычно не вызывает, как многим ошибкам на Unix - нравится при использовании более простого -static, флаг к GCC, как он делает в Windows.

22
ответ дан 1 December 2019 в 12:02
поделиться

Поэтому SDL освобождает, находятся под LGPL-лицензией.

, Если Вы хотите к статической ссылке освобождение (можно сделать это если Ваш перекомпилировать их. Требуется некоторое взламывание make-файлов, хотя) необходимо поместить игру в соответствии с некоторой совместимой лицензией Open Source также.

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

0
ответ дан 1 December 2019 в 12:02
поделиться

Через этот сообщение списка рассылки SDL кажется, что sdl средства разработки поставлются со сценарием sdl-конфигурации, который можно использовать с - статичный - освобождает флаг для определения, какой компоновщик отмечает Вас, должен использовать.

2
ответ дан 1 December 2019 в 12:02
поделиться

В моей системе (Ubuntu) я должен использовать следующие флаги:

-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl

Это связывает SDL, SDL _ изображение и многие их зависимости как статические. libdl вам никогда не понадобится статический, поэтому создание полностью статического двоичного файла, использующего образ SDL _ , - плохая идея. pulse, caca, aa и directfb, вероятно, можно сделать статическими. Я еще не успел понять их.

0
ответ дан 1 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

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