MasterChief2
Slavan
- Učlanjen(a)
- 01.03.2015
- Poruke
- 927
- Poena
- 215
Moja oprema
- CPU & Cooler
- AMD Ryzen 7 5700X3D i Cooler Master Hyper 212 Evo
- Matična ploča
- MSI B350 Tomahawk
- RAM
- G.SKILL 32GB Aegis DDR4 3200MHz CL16 KIT F4-3200C16D-32GIS
- GPU
- SAPPHIRE NITRO+ Radeon RX 580 8GB GDDR5
- Storage
- 2 x 2TB HDD, 1 x WD_BLACK 2TB SN750, 1 x Samsung SSD 870 QVO 1TB
- Zvuk
- Integrisana zvucna + Kenwood KA-1500 + Pioneer CS-999
- PSU
- Be Quiet! Straightpower BQT E6-700W
- Kućište
- Spawn Gerovit LD01
- Monitor
- Tesla 27GM620BF 27"/FullHD/165Hz
- Miš & tastatura
- A4Tech Bloody V7 i Dell SK-8175
- Laptop
- MacBook Pro (13-inch, M1, 2020)
- Mobilni telefon
- LeEco Le Max 2 6/128GB
- Steam
- antonic901
- Pristup internetu
- Optički internet
Ukratko:
Portujem XBMC/Kodi na Original Xbox i limitiran sam C++98 standardom. Skoro sam u potpunosti uspeo da backportujem GUILIB sa Kodi Krypton v17, ali kako se polako priblizavam novijim verzijama Kodija sve vise imam problema sa funkcijama koje nedostaju u C++98. Jednja od njih koja mi je sada preko potrebna da bi resio neki deadlock jeste std::atomic. Napisao sam dve implementacije za atomicne operacije nad bool vrednoscu, ali nisam siguran da li je i koja ispravna (ako je i jedna). Pa bih molio za pomoc malo iskusnijih C/C++ programera. Ovo je su implementacije:
1. Upotrebom Win native threading funkcija:
2. Upotrebom AtomicIncrement/AtomicDecrement koje sam iskopa u starijim verzijama Kodija:
U prilogu sam zakacio Atomics.cpp u kom se nalaze Kodijeve metode. Da li je i jedna od ovih implementacija validna i ako nije da li neko ima ideju kako simulirati std::atomic u C++98?
Portujem XBMC/Kodi na Original Xbox i limitiran sam C++98 standardom. Skoro sam u potpunosti uspeo da backportujem GUILIB sa Kodi Krypton v17, ali kako se polako priblizavam novijim verzijama Kodija sve vise imam problema sa funkcijama koje nedostaju u C++98. Jednja od njih koja mi je sada preko potrebna da bi resio neki deadlock jeste std::atomic. Napisao sam dve implementacije za atomicne operacije nad bool vrednoscu, ali nisam siguran da li je i koja ispravna (ako je i jedna). Pa bih molio za pomoc malo iskusnijih C/C++ programera. Ovo je su implementacije:
1. Upotrebom Win native threading funkcija:
C++:
class AtomicBool
{
public:
AtomicBool() : value(0) {}
AtomicBool(bool newValue)
{
set(newValue);
}
AtomicBool& operator=(bool newValue)
{
set(newValue);
return *this;
}
operator bool() const
{
return get();
}
private:
bool get() const
{
return InterlockedCompareExchange(const_cast<LONG*>(&value), 1, 1) == 1;
}
void set(bool newValue)
{
InterlockedExchange(const_cast<LONG*>(&value), newValue ? 1 : 0);
}
LONG value;
};
2. Upotrebom AtomicIncrement/AtomicDecrement koje sam iskopa u starijim verzijama Kodija:
Kod:
class AtomicBool
{
public:
AtomicBool() : value(0) {}
AtomicBool(bool newValue)
{
set(newValue);
}
AtomicBool& operator=(bool newValue)
{
set(newValue);
return *this;
}
operator bool() const
{
return get();
}
private:
bool get() const
{
return value == 1;
}
void set(bool newValue)
{
newValue ? AtomicIncrement(&value) : AtomicDecrement(&value);
}
volatile LONG value;
};
U prilogu sam zakacio Atomics.cpp u kom se nalaze Kodijeve metode. Da li je i jedna od ovih implementacija validna i ako nije da li neko ima ideju kako simulirati std::atomic u C++98?