Предположим, что у меня есть модуль, в котором есть очередь..NET - безопасен ли метод Queue.Enqueue?
Для других лиц к Епдиеему, они должны пройти через функцию:
public sub InsertIntoQueue(Obj)
MyQueue.Enqueue(Obj)
end sub
Если я несколько потоков работают, и они хотят, чтобы позвонить InsertIntoQueue(), это считается поточно?
У меня создается впечатление, что в памяти требуется только одна копия инструкций в памяти, необходимых для выполнения функции InsertIntoQueue(), которая заставила бы меня думать, что это потокобезопасность.
Однако интересно, что происходит, когда два потока пытаются запустить функцию одновременно?
Является ли этот поток безопасным, а если нет, то как я могу сделать его потокобезопасным? (и каковы были бы последствия для скорости и использования памяти)
Мой план состоял в том, чтобы иметь несколько потоков Enqueuing и один поток, блокирующий и очищающий всю очередь через определенные промежутки времени. –
Если вы заблокируете, пока вы обрабатываете все объекты в очереди, все потоки, которые находятся в очереди, будут блокированы (если они будут пытаться вставить в очередь) до тех пор, пока не закончится поток детекции, вам может быть лучше заблокировать только пустую проверку и деактивацию каждого объект, а не всю обработку очереди. – Matt