Wpis z mikrobloga

Hej,

http://codingways.blogspot.de/2012/08/implementing-thread-safe-queue-in-c11.html

Mam dwa pytania.
1. Po co używać tutaj std::shared_ptr Jeśli będę chciał użyć shared_ptr to sobie dam za T więc gość chciał za dobrze? Dobrze myślę?
2. Po co strażnik (std::lock_guard lock(mMut); ) w Empty? I tak po zwróceniu true/false nie wiemy czy kolejka jest pusta lub pełna. Bo locka już nie ma. I w kolejnej operacji wcale nie musi być już pusta.

#cpp11 #cpp #programowanie #wielowatkowosc
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@xaoc:
1. Wydaje sie, ze masz racje.
2. Jeśli jeden watek będzie ustawial flage (zakladajac, ze jest to zaimplementowane przy uzyciu jakiejs flagi) isEmpty a drugi ja czytal to masz race condition.
  • Odpowiedz
@xaoc: 1. Nie za bardzo rozumiem pytania, ale zwracasz shared_ptr po to, bo gdy po zwróceniu go przez funkcje "pop" inny wątek usunie ten element, ty nadal będziesz mógł go używać
  • Odpowiedz
@xaoc To T jest ważne, dzięki temu możesz stworzyć kolejkę która przechowuje dowolny typ podstawiony za T, gdyby T nie było, tylko wstawiłbys jakiś typ na sztywno to wszystko będzie działać, ale kolejka będzie mogła przechowywać tylko i wyłącznie ten typ.

Gość nie chciał za dobrze, tylko ładnie napisał kolejkę. Gdybyś przykładowo chciał dwie kolejki, z intem i double, to bez tego T trzeba by było napisać dwa razy klasę z
  • Odpowiedz
@xaoc 1 imo przedobrzył. Wystarczyło zrobić kopię obiektu i ją zwrócić. Niczego tym nie zyskał (dalej wymaga copy constuctable). Zresztą - dlaczego miałoby tu być race cond? Można 2x zpopować element?
  • Odpowiedz