MasterChief2
Slavan
- Učlanjen(a)
- 01.03.2015
- Poruke
- 949
- Poena
- 215
Moja oprema
- CPU & Cooler
- AMD Ryzen 9 5950X & Be Quiet! Dark Rock 5
- Matična ploča
- Gigabyte B550 AORUS ELITE AX V2
- RAM
- G.SKILL 32GB Aegis DDR4 3000MHz CL16 KIT F4-3200C16D-32GIS
- GPU
- NITRO+ AMD Radeon™ RX 9070 XT OC GPU
- Storage
- 1 x Corsair MP500 120GB, 1 x WD_BLACK 2TB SN750, 1 x Samsung SSD 870 QVO 1TB, 2 x 2TB HDD
- Zvuk
- Integrisana zvucna + Kenwood KA-1500 + Pioneer CS-999
- PSU
- Seasonic Prime TX-1600
- 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
- Xiaomi 11 Lite 5G NE
- Steam
- antonic901
- Pristup internetu
- Optički internet
- Mobilni 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?