У меня есть класс F # с кучей последовательностей. Класс содержит простой метод next()
, который возвращает следующий элемент в текущей последовательности. Если все элементы текущей последовательности были возвращены, она перейдет к следующей последовательности. Класс содержит указатель, следующим элементом которого является последовательность и из какой последовательности он возвращается.
В настоящее время я ограничен только раскрытием метода next()
.
Некоторые из вышестоящих классов будут использовать мой класс (один и тот же экземпляр объекта) между разными потоками. Это приведет к потере синхронизации, поскольку все потоки должны начинаться с нуля. Я знаю, что это не идеально, но это то, с чем мне приходится работать в данный момент.
Пример:
Thread 1 next(): return elem. A
Thread 1 next(): return elem. B
Thread 2 next(): return elem. A
Thread 1 next(): return elem. C
Thread 2 next(): return elem. B
Есть ли способ отслеживания указателя для каждого потока?
Я думал об использовании Threading.Thread.CurrentThread.ManagedThreadId
в качестве ключа на карте, а затем вернул указатель (и соответственно обновил его там). Я немного обеспокоен безопасностью потоков этой Карты, и если два потока обновляют свое состояние одновременно.
Я надеюсь, что Сомоне может дать мне несколько мыслей о том, как заставить это работать.