-
+54
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
class SpinLock
{
std::atomic_flag lck;
public:
SpinLock(){
unlock();
}
__forceinline void lock(){
while (lck.test_and_set(std::memory_order_acquire)){
}
}
__forceinline void unlock(){
lck.clear(std::memory_order_release);
}
};
LispGovno,
22 Февраля 2015
-
−115
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
def checkio(res):
#bruteforce LOL
if res[0][0] == res[1][0] == res[2][0] == "X":
return "X"
if res[0][1] == res[1][1] == res[2][1] == "X":
return "X"
if res[0][2] == res[1][2] == res[2][2] == "X":
return "X"
if res[0][0] == res[0][1] == res[0][2] == "X":
return "X"
if res[1][0] == res[1][1] == res[1][2] == "X":
return "X"
if res[2][0] == res[2][1] == res[2][2] == "X":
return "X"
if res[0][0] == res[1][1] == res[2][2] == "X":
return "X"
if res[0][2] == res[1][1] == res[2][0] == "X":
return "X"
if res[0][0] == res[1][0] == res[2][0] == "O":
return "O"
if res[0][1] == res[1][1] == res[2][1] == "O":
return "O"
if res[0][2] == res[1][2] == res[2][2] == "O":
return "O"
if res[0][0] == res[0][1] == res[0][2] == "O":
return "O"
if res[1][0] == res[1][1] == res[1][2] == "O":
return "O"
if res[2][0] == res[2][1] == res[2][2] == "O":
return "O"
if res[0][0] == res[1][1] == res[2][2] == "O":
return "O"
if res[0][2] == res[1][1] == res[2][0] == "O":
return "O"
return "D"
Определить результат игры в крестики нолики.
gost,
22 Февраля 2015
-
+101
- 1
- 2
char buf[4096];
*((char*)&buf[14]) = 0x30;
Запись значения в массив (такой способ обращения к элементу массива тщательно соблюдается на протяжении всех 25000 строк кода проекта)
refactor,
20 Февраля 2015
-
+158
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
this.addItem = function(item) {
if (item.id == null & item.Name != null & item.Name != '') {
item.id = uid++;
items.push(item);
$window.sessionStorage.setItem('items', JSON.stringify(items));
} else {
for (i in items) {
if (items[i].id == item.id) {
items[i] = item;
}
}
}
}
nya-nya-ma,
20 Февраля 2015
-
−119
- 1
- 2
- 3
- 4
- 5
- 6
- 7
РасходныйКассовыйОрдер ГДЕ (НЕ РасходныйКассовыйОрдер.ВидОперации В
(ВЫБРАТЬ
ВидыОперацийРКО.Ссылка
ИЗ
Перечисление.ВидыОперацийРКО КАК ВидыОперацийРКО
ГДЕ
ВидыОперацийРКО.Ссылка = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)))
Обнаружил вот это чудо в ограничении почти всех ролей на ЧТЕНИЕ.
Древняя УПП 1.2 сильно допиленная.
Теперь сижу и горюю о том, сколько времени придётся потратить удаляя это из всех ролей...
Goggy,
20 Февраля 2015
-
+62
- 1
- 2
- 3
- 4
if( state != !val )
{
state = !val;
}
Переключение. Обе переменные булевские.
absolut,
20 Февраля 2015
-
+51
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
void main() {
system("color 04");
setlocale(LC_ALL, "rus");
if (start == false) {
logos();
loading();
start = true;
system("cls");
}
if (get_hero_s == false) {
get_hero();
get_hero_s = true;
}
menu();
map();
if (go_went_gone == 1) {
system("cls");
cout << "\nВы напали на оборотня в тёмном лесу\n";
loading();
Sleep(1400);
fight("werewolf");
go_went_gone = 0;
main();
}
else if (go_went_gone == 3) {
system("cls");
cout << "\nВы напали на лучника в мрачном поле\n";
loading();
Sleep(1400);
fight("archer");
go_went_gone = 0;
main();
}
if (go_went_gone == 2) {
system("cls");
cout << "\nВы напали на гоблина в тёмном лесу\n";
loading();
Sleep(1400);
fight("werewolf");
go_went_gone = 0;
main();
}
else if (go_went_gone == 4) {
system("cls");
cout << "\nВы напали на лучника на костяного лучника в подземелье \n";
loading();
Sleep(1400);
fight("archer");
go_went_gone = 0;
main();
}
Рекурсия мейна, и это курсовая работа!!
BoMo,
20 Февраля 2015
-
−119
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
Процедура ДействияФормыДействие5(Кнопка)
ТекущиеДанные = ЭлементыФормы.СправочникСписок.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекПометкаУдаления = ТекущиеДанные.Ссылка.ПометкаУдаления;
КонтрагентОбъект = ТекущиеДанные.Ссылка.ПолучитьОбъект();
КонтрагентОбъект.ПометкаУдаления = Не ТекПометкаУдаления;
Попытка
КонтрагентОбъект.записать();
Исключение
Сообщить("Не удалось " + ?(ТекПометкаУдаления, "снять", "установить") + " пометку удаления.");
КонецПопытки;
КонецПроцедуры
На форме списка справочника "Контрагенты" добавлена кнопка со значком "непосредственное удаление". А это её обработчик.
НАХРЕНА???
doom2good,
20 Февраля 2015
-
+126
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
// На самом деле это пока только псевдокод. Real code will be on C/C++
//Lock-free non blocking and anatomic operation only if IP was changed
// IN SHARED MEMORY
non_atomic_in_shmem bad_IP_flag_non_atomic_in_shmem[64][16]; // in real code it will be uint64_t array[16] and bits operations with it
some_ip_class IPs_non_atomic_in_shmem[64][16] //
std::atomic<uint64_t> version_holder_atomic_in_shmem[64][16]; // it is debatable "whether to do it the Atomic" but for reinsurance
// IN WRITER PROCESS
void worker_reassign_IP_by_num(new_IP, back_end_server_ID, num)
if bad_IP_flag_non_atomic_in_shmem[back_end_server_ID][num] // in real code this check will be not here but will have same sense
version_holder_atomic_in_shmem[back_end_server_ID][num] ++ //it is increment of atomic var version and version become NOT even
__sync_synchronize(); //TODO may be we can use something better here ?
IPs_non_atomic_in_shmem[back_end_server_ID][num] = new_IP //it copy assignment
__sync_synchronize(); //TODO may be we can use something better here ?
version_holder_atomic_in_shmem[back_end_server_ID][num] ++ //it is increment of atomic var version and version become even
__sync_synchronize(); //TODO may be we can use something better here ?
bad_IP_flag_non_atomic_in_shmem[back_end_server_ID][num] = 0
// IN READER PROCESS
some_ip_class get_valid_ip_by_num(back_end_server_ID,num){
//TODO version_holder is atomic for now, may we do it non atomic? I think YES. Are any arguments in opposites?
// Instead of atomic can we possible use volatile?
uint64_t version_before = version_holder_atomic_in_shmem[back_end_server_ID][num] //it is atomic copy assignment
//if (version_befor & 1) // is not even it will work too instead of checking flags
// but checking flags it is less expensive operation than checking version because the version var is atomic
if bad_IP_flag_non_atomic_in_shmem //
return 0;
some_ip_class ip = IPs_non_atomic_in_shmem[back_end_server_ID][num]
uint64_t version_after = version_holder_atomic_in_shmem[back_end_server_ID][num] // it is atomic copy assignment
if version_before != version_after // versions is not sames
// we may add extra check of version evenest but it will cost us 1 slow atomic operation and excessively
//OR (version_after & 1) //or versions is not even ip is not correct
return 0
return ip
}
some_ip_class get_valid_ip(back_end_server_ID)
while(time_not_expaired) {
for (n=0; n<16; n++){
some_ip_class ip = get_valid_ip_by_num(back_end_server_ID, n)
if ip
return ip
}
//"it will never happened" "if it happened and time expired do something but it is problems on the back end servers site"
//”it is similar situation with situation when back end server just down ”
}
return 0 // or some server_down_ip ;)
some_ip_class check_or_get_new_ip( curent_ip, back_end_server_ID, num)
if NOT bad_IP_flag_non_atomic_in_shmem
if current_ip == shmem_array_of_IP_non_atomic[back_end_server_ID][num] // maybe need copy but I think it's not necessary
return current_ip
Задача: есть reader(ы) Это процессы 20 - 30 -64, которые обращаются к web-серверу. У web-сервера может быть несколько ip (не больше 16). Переодически (1 раз в ~30 секунд) пара (1-2) IP может отвалиться и вместо них может появится пара 1-2 новых. reader обнаружив bad IP выставляет флаг bad_IP_flag. Writer (только 1 единственный процесс не reader) Переодически (1 раз в ~1 сек) проверяет флаг, увидев bad_IP_flag запускает DNS-lookup который длиться примерно (30mks - 1s). Обновляет массив ip Readers при попытке соединиться проверяют не стал ли IP плохим если стал пробуют другой из массива Но суть не в этом Суть в том как безопасно работать с shared memory? Где что не так в предложенной задумке?
apgurman,
20 Февраля 2015
-
+157
- 1
- 2
- 3
- 4
- 5
- 6
function getMinQueueOrdering()
{
$sql="SELECT MAX(ordering)
FROM priceloaddata_queue";
.........
}
нет слов.
Vasiliy,
19 Февраля 2015