Я пытаюсь заблокировать блокировку на странице test.cfm, и ниже приведен код, написанный на странице.
<cfscript>
writeOutput("Before lock at #now()#");
lock name="threadlock" timeout="3" type="exclusive"
{
writeOutput("<br/>started at #now()#");
thread action="sleep" duration="10000";
writeOutput("<br/>ended at #now()#");
}
writeOutput("<br/>After lock at #now()#");
</cfscript>
предполагая, что мой URL-адрес страницы http://localhost.local/test.cfm и запустить его в браузере в две разные вкладки. Я ожидал, что один из URL-адресов выдаст ошибку тайм-аута через 3 секунды, поскольку другой URL-адрес заблокирует его как минимум на 10 секунд из-за спящего режима потока. Удивительно, но я не получаю никакой ошибки тайм-аута, а второй вызов страницы запускается через 10 секунд, так как первый вызов завершает выполнение.
Но я добавляю некоторый параметр URL-адреса (например, http://localhost.local/test.cfm?q=1) выдаст ошибку. Также я вызываю тот же URL-адрес в другом браузере, тогда один из вызовов вызовет проблему тайм-аута.
Блокировка основана на сеансе и URL-адресе?
Обновление Здесь выводятся данные для двух разных случаев:
Случай 1:
TAB1 URL-адрес: http://localhost.local/test/test.cfm а>
Before lock at {ts '2013-10-18 09:21:35'}
started at {ts '2013-10-18 09:21:35'}
ended at {ts '2013-10-18 09:21:45'}
After lock at {ts '2013-10-18 09:21:45'}
TAB2 URL-адрес: http://localhost.local/test/test.cfm а>
Before lock at {ts '2013-10-18 09:21:45'}
started at {ts '2013-10-18 09:21:45'}
ended at {ts '2013-10-18 09:21:55'}
After lock at {ts '2013-10-18 09:21:55'}
Вариант 2:
TAB1 URL-адрес: http://localhost.local/test/test.cfm а>
Before lock at {ts '2013-10-18 09:27:18'}
started at {ts '2013-10-18 09:27:18'}
ended at {ts '2013-10-18 09:27:28'}
After lock at {ts '2013-10-18 09:27:28'}
TAB2 URL-адрес: http://localhost.local/test/test.cfm а>? (Добавлено? в конце)
Before lock at {ts '2013-10-18 09:27:20'}
A timeout occurred while attempting to lock threadlock.
The error occurred in C:/inetpub/wwwroot/test/test.cfm: line 13
11 :
12 : <cfoutput>Before lock at #now()#</cfoutput>
13 : <cflock name="threadlock" timeout="3" type="exclusive">
14 : <cfoutput><br/>started at #now()#</cfoutput>
15 : <cfthread action="sleep" duration="10000"/>
...
Результат для случая 2, как и ожидалось.
Для случая 1 странная вещь, которую я только что заметил, это вывод вкладки 2 «Перед блокировкой в {ts '2013-10-18 09:21:45'} указывает, что весь запрос начинается через 10 секунд (означает после полного выполнения первой вкладки) когда я запустил его во втором URL-адресе сразу после 2 секунд первых вкладок.