- Mr Dini: Mindent a StreamSharkról!
- hdanesz: Hyundai Ioniq 28 kWh - Újabb tapasztalatok - fogyasztás és hatótáv
- gban: Ingyen kellene, de tegnapra
- eBay-es kütyük kis pénzért
- LordAthis: Ismét egy "Idióta" A.I. Projekt, hogy meglovagolja a trendeket...
- Luck Dragon: Asszociációs játék. :)
- Austin F.: Appok teljes képernyőn – immerzív mód [Android]
- weiss: Pant* rant
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Klímaváltozás, természetszennyezés
Új hozzászólás Aktív témák
-
cog777
őstag
Masik kerdes.
Adja magat egy thread es egy nem thread safe verzioja a circual_buffer-nek.
Forditasi idoben meg tudom mondani hogy a mutex-es sorok letiltodjanak vagy engedelyezve legyenek template-et hasznalva?Valami ilyesmire gondoltam, ugyanakkor forditasi hibaim vannak:
#pragma once
#include <array>
#include <stddef.h>
#include <mutex>
enum class THREAD_SAFETY
{
THREAD_SAFE = 0,
NOT_THREAD_SAFE
};
template <typename T, size_t S, THREAD_SAFETY TH>
class circular_buffer
{
public:
explicit circular_buffer() {}
// Push an item to the tail
bool push(const T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_full())
return false;
buffer_[head_] = item;
head_ = (head_ + 1) % buffer_.size();
return true;
}
// Pop an item from the head
bool pop(T &item)
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
if (is_empty())
return false;
item = buffer_[tail_];
tail_ = (tail_ + 1) % buffer_.size();
return true;
}
// Check if the buffer is full
bool is_full() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return (head_ + 1) % buffer_.size() == tail_;
}
// Check if the buffer is empty
bool is_empty() const
{
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
std::lock_guard<std::recursive_mutex> lk(m);
}
return head_ == tail_;
}
private:
std::array<T, S> buffer_;
size_t head_{0};
size_t tail_{0};
if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
{
mutable std::recursive_mutex m;
}
};main.cpp-ben:
circular_buffer<int, 5, THREAD_SAFETY::THREAD_SAFE> buffer;
De sajnos hibakat ir ki:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:70:5: error: expected unqualified-id before ‘if’
70 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)
| ^~
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h: In member function ‘bool circular_buffer<T, S, TH>::push(const T&)’:
/home/zoltan/dev/learning/CPP/algorithms/producer-consumer/circular_buffer.h:21:66: error: type/value mismatch at argument 1 in template parameter list for ‘template<class, class> struct std::is_same’
21 | if constexpr (std::is_same<TH, THREAD_SAFETY::THREAD_SAFE>::value)Masreszt nem vagyok biztos hogy a constexpr if-ek valodi blokkent mukodnek, tehat a lock_guard mukodni fog-e...
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- DUNE médialejátszók topicja
- Építő/felújító topik
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Ford SYNC 3 infotainment rendszer teszt
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Mr Dini: Mindent a StreamSharkról!
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Google Pixel topik
- Kertészet, mezőgazdaság topik
- OLED TV topic
- További aktív témák...
- Hp 15,6",AMD A10(4X2,9Ghz),8 GB RAM, Jó állapot
- Lexar NM790 2TB M.2 NVME PCI-E 4.0 x4 - Új - 7400-6500 MBs - Eladó!
- BH Fitness Prisma M30 futópad kedvező áron, első tulajdonostól
- ÚJ Asus TUF Gaming F17 FX707 - 17.3"FHD IPS 144Hz - i7-13620H - 16GB - 1TB - RTX 4060 - 3 év gari
- Macbook Pro Retina 2017 94%-os akku, nagyon szép állapot
- BESZÁMÍTÁS! GIGABYTE AORUS ELITE Z790 i7 14700K 64GB DDR5 1TB SSD 7900XTX 24GB be quiet! SB802 1000W
- Újszerű Asus ExpertBook B1 B1500 - 15.6" FullHD IPS - i5-1235U - 16GB - 512GB SSD - Win11 - Garancia
- Xiaomi Redmi Note 14 Pro 256GB Kártyafüggetlen 1Év Garanciával
- Quadro FX 570 eladó
- ÁRGARANCIA!Épített KomPhone i9 14900KF 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest