Из Википедии:
Потокобезопасность - это концепция компьютерного программирования, применяемая в контексте многопоточных программ. Часть кода является поточно-ориентированной, если она работает правильно при одновременном выполнении несколькими потоками. В частности, он должен удовлетворять потребность нескольких потоков в доступе к одним и тем же общим данным, а также необходимость доступа к общему фрагменту данных только одному потоку в любой момент времени.
Есть несколько способов достижения безопасности потока:
Повторный вход:
Написание кода таким образом, что он может быть частично выполнен одной задачей , повторно введенный другой задачей, а затем возобновленный с исходной задачи. Это требует сохранения информации о состоянии в переменных, локальных для каждой задачи, обычно в ее стеке, а не в статических или глобальных переменных.
Взаимное исключение:
Доступ к совместно используемым данным сериализуется с использованием механизмов, которые гарантируют, что только один поток читает или записывает совместно используемые данные в любое время. Требуется большая осторожность, если фрагмент кода обращается к нескольким совместно используемым частям данных - проблемы включают в себя условия гонки, взаимоблокировки, блокировки в реальном времени, голодание и различные другие проблемы, перечисленные во многих учебниках по операционным системам.
Локальное хранилище потока:
Переменные локализованы так, что каждый поток имеет свою собственную личную копию. Эти переменные сохраняют свои значения в пределах подпрограммы и других границ кода и являются поточно-ориентированными, поскольку они локальны для каждого потока, даже если код, который обращается к ним, может быть повторно входящим.
Атомарные операции:
Доступ к общим данным осуществляется с помощью атомарных операций, которые не могут быть прерваны другими потоками. Обычно это требует использования специальных инструкций машинного языка, которые могут быть доступны в библиотеке времени выполнения. Поскольку операции являются атомарными, общие данные всегда сохраняются в допустимом состоянии независимо от того, какие другие потоки обращаются к ним. Атомарные операции составляют основу многих механизмов блокировки потоков.
читать дальше:
http://en.wikipedia.org/wiki/Thread_safety
на немецком языке: http://de.wikipedia.org/wiki/Threadsicherheit
на французском языке: http: // fr .wikipedia.org / wiki / Threadsafe (очень короткий)
Первый день этого года:
date('0001-01-01') + year(current date) years - 1 year
Первый день этого месяца:
date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 1 month
Первый день прошлого месяца :
date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 2 months
Я считаю, что следующее вам подойдет.
ROUND_TIMESTAMP (somedate,'W')
Чтобы дополнить это дополнительной информацией. Приведенное выше решение идеально подходит, если вам нужен первый день месяца, скажем, вы хотите последний день месяца, или, в моем случае, мне нужен последний день следующего квартала.
Сверху я делал
date('0001-01-31') + year(date(prevQdate))years - 1 year + month(prevQdate) months + 2 months)
Что не давало мне того, что я хотел, иногда дата была 30-го числа вместо 31-го в месяцах с 31 днем ...
Изменение на
date('0001-01-31') + year(date(prevQdate))years - 1 year + **(month(prevQdate) + 2)** months)
Дало мне то, что я хотел. Похоже, первое добавление месяцев с даты предыдущего квартала сбрасывало ДЕНЬ в моей дате, и, таким образом, второе добавление месяцев работало с датой только с 30 днями в месяце.
Просто кое-что, чего следует опасаться. при использовании этого метода обработки даты в DB2.
Первый день текущего месяца:
CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS
Первый текущего года -
CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - (MONTH(CURRENT_DATE)-1) MONTHS
Последний день последнего месяца:
CURRENT_DATE - DAY(CURRENT_DATE) DAYS
Первый день последнего месяца:
CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 1 MONTH