Существует файл, который содержит 10G (1000000000) целых чисел, найдите медиану этих чисел. вам дают 2G памяти, чтобы сделать это. Кто-нибудь может придумать разумный путь? Спасибо!
Я пытаюсь сделать ситуацию с потоком производитель / потребитель более эффективной, пропуская дорогостоящие операции с событиями, если это необходимо, с помощью чего-то вроде:
//cas(variable, compare, set) is atomic compare and swap
//queue is already lock free
running = false
// dd item to queue – producer thread(s)
if(cas(running, false, true))
{
// We effectively obtained a lock on signalling the event
add_to_queue()
signal_event()
}
else
{
// Most of the time if things are busy we should not be signalling the event
add_to_queue()
if(cas(running, false, true))
signal_event()
}
...
// Process queue, single consumer thread
reset_event()
while(1)
{
wait_for_auto_reset_event() // Preferably IOCP
for(int i = 0; i < SpinCount; ++i)
process_queue()
cas(running, true, false)
if(queue_not_empty())
if(cas(running, false, true))
signal_event()
}
Очевидно, что попытка исправить все это немного сложно (!), Так же как и приведенный выше псевдокод правильный? Решение, которое сигнализирует о событии больше, чем нужно, подходит, но не то, которое делает это для каждого элемента.