Возможное состояние гонки с синглтоном var scope? - PullRequest
0 голосов
/ 12 июля 2011

У меня возможное состояние гонки с синглтоном в области применения.Однако я подумал, что, определив переменную уровня функции, это не будет проблемой.

<!--- Calling page --->
<cfset url.UUID = createUUID() />
<cfset application.UUIDBot.displayUUID() />


<!--- UUIDbot --->
<cfcomponent>

    <cffunction name="displayUUID">

      <cfset var rc = {} />
      <cfset rc.position = url.uuid />
      <cfinclude template="displayUUID.cfm" />

    </cffunction>
</cfcomponent>

<!--- displayUUID.cfm --->
<cfoutput>#rc.position#</cfoutput>

Возможно ли, что displayUUID.cfm не будет отображать UUID в URL?

Ответы [ 3 ]

1 голос
/ 12 июля 2011

Я читал, что сама запись структуры implict не является поточно-ориентированной.

http://www.barneyb.com/barneyblog/2009/06/19/coldfusion-struct-literals-are-not-thread-safe-cfml-ones-are/

Попробуйте изменить ее на использование блокировки и StructNew.

1 голос
/ 13 июля 2011

То, что вы написали там, безопасно для потока.Проблема безопасности потоков со структурами возникает при назначении ранее нулевого остроконечного фрагмента памяти.Поскольку вы используете встроенную область видимости / структуру URL, которая уже имеет допустимое адресное пространство, это не должно быть проблемой.

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

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

cfinclude?Зачем?Я боюсь, что вы идете по грязной дороге динамических включений.

1 голос
/ 12 июля 2011

Проблема будет найдена в коде, которым вы не поделились, который включен в файл displayUUID.cfm. Код в displayUUID не является потокобезопасным (я предполагаю). Этот код также должен использовать «var» для локализации переменных или префикса ваших ссылок с «local». чтобы убедиться, что они находятся на местном уровне.

Итог: Когда вы используете cfinclude внутри функции, включенный код также должен быть поточно-ориентированным.

...