johnfound palavrov ...но все пак това, че не може конкурентно да се вадят елементи си е проблем.
Вкарването на елементи в опашката е еднозначно понятие – вкарваш ги и толкова. Затова и много нишки могат да вкарват едновременно и без проблеми елементи. И за елементите и за опашката е все едно кой вкарва елементите, важното е в какъв ред.
Изваждането на елементи обаче е съвършено друга бира. Тука важното е какво точно смяташ да правиш с тези елементи.
В моят случай нишката, която ги тегли може да извади един или няколко последователни елемента, докато си свърши работата. До този момент, другите нишки ще виждат списъка като празен, за да не развалят реда на елементите нужни на първата нишка. След това, като им дойде реда, те ще видят опашката пак пълна и ще могат да изтеглят своите един или няколко последователни елемента.
Но всъщност реално в проекта, в който ще използвам това, ще има само една нишка, която ще тегли елементи от опашката. Тегленето го направих thread-safe, просто защото частично се пресича с вкарването на елементи при обновяването на указателите.
Ами осира се читавата имплементация заради частен случай. Напъни се малко и може да те осени как да направиш и ваденето на елементи да се усеща, че има някой който добавя и да се изчаква.
Мисля, че също може да не ползваш pFirst за sentinel от което хем кода ще стане по ясен, хем ще може да се развържеш от изискването .next да е винаги на на отместване нула.