Article View: pl.comp.lang.c
Article #309922std::thread DESPERACKA PROŚBA O POMOC!!!
From: Szyk Cech
Date: Wed, 11 Sep 2019 18:29
Date: Wed, 11 Sep 2019 18:29
148 lines
4302 bytes
4302 bytes
Cześć!
[Czego chcę]
Chcę napisać klasę realizującą semafor.
Chcę do niej napisać testy jednostkowe udowadniające jej proprawność.
[Co ja robię]
Znalazłem w Internecie strony jakiejś instytucji naukowej na której
była klasa semafora i zainspirowany nią napisałem swoją wersję.
Oto te strony:
http://sandbox.mc.edu/~bennet/cs422b/notes/semaphore_h.html
http://sandbox.mc.edu/~bennet/cs422b/notes/semaphore_cpp.html
Jak widać klasa jest prosta jak drut. Jednak nie działa u mnie.
Mam wyścigi które zatrzymują aplikację testową.
Aplikacja działa w debugerze. Działa też gdy dodam jakieś linie:
cout << "message" << endl << flush;
Jednak nie działa gdy uruchamia się ją samodzielnie (ani w trybie debug
ani w trybie release).
Mój system to Linux KDE Neon (bazuje na Ubutnu 18.04 LTS).
Mój procesor to Intel Core Duo (z 2009 roku).
[Jak odtworzyć błąd]
Wklejam poniżej kod który jest kompletnym minimalnym przykładem.
Jest on w pełni automatyczny. Trzeba jedynie utworzyć 3 małe pliki,
nadać im uprawnienia wykonania i odpalić skrypt run.sh z lini komend.
Po 2-3 iteracjach u mnie wykonanie zamiera z nie znanego powodu.
Proszę o pomoc! Z góry dzięki i pozdro!
Szyk Cech
[Pliki]
=============================================================
BEGIN: run.sh
#!/bin/bash
./make.sh
lCounter=0
while [ 1 ]; do
lCounter=$[lCounter + 1]
echo "Run: $lCounter"
./semtest
done
END: run.sh
=============================================================
BEGIN: make.sh
#!/bin/bash
g++ -std=c++17 -pthread -O2 -s -DNDEBUG ./Main.cpp -o semtest
END: make.sh
=============================================================
BEGIN: Main.cpp
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <thread>
#include <vector>
#include <iostream>
using namespace std;
class Semaphore
{
public:
Semaphore(int aCounter);
public:
int value();
void up();
void down();
protected:
int mCounter;
std::mutex mAccessMutex;
std::condition_variable mWaitingCondition;
};
Semaphore::Semaphore(int aCounter)
: mCounter(aCounter)
{
}
int Semaphore::value()
{
return mCounter;
}
void Semaphore::down()
{
unique_lock lock(mAccessMutex);
--mCounter;
if(mCounter < 0)
mWaitingCondition.wait(lock);
}
void Semaphore::up()
{
unique_lock lock(mAccessMutex);
++mCounter;
if(mCounter <= 0)
mWaitingCondition.notify_one();
}
void SemTestThread(Semaphore* aSem)
{
aSem->down();
}
int main()
{
Semaphore lSem(5);
vector<thread> lArray;
lArray.resize(15);
for(unsigned long i(0); i < lArray.size(); ++i)
lArray[i] = thread(SemTestThread, &lSem);
bool lResult(true);
for(int i(0); i < 5; ++i)
lArray[i].join();
lResult = lResult && (lSem.value() == -10);
for(int i(10); i > 0; --i)
{
lSem.up();
lArray[15 - i].join();
lResult = lResult && (lSem.value() == -i + 1);
}
cout << "lResult: " << lResult << endl << flush;
// return EXIT_SUCCESS;
}
END: Main.cpp
Technical Details
Message-ID:
<42beF.199079$hJ3.167352@fx07.am4>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!news.highwinds-media.com!fx07.am4.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!news.highwinds-media.com!fx07.am4.POSTED!not-for-mail Newsgroups: pl.comp.lang.c X-Mozilla-News-Host: news://newshosting.com:119 From: Szyk Cech <szykcech@spoko.pl> Subject: std::thread DESPERACKA PROŚBA O POMOC!!! User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 Lines: 150 Message-ID: <42beF.199079$hJ3.167352@fx07.am4> X-Complaints-To: abuse(at)newshosting.com NNTP-Posting-Date: Wed, 11 Sep 2019 18:29:20 UTC Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com Date: Wed, 11 Sep 2019 20:29:34 +0200 X-Received-Bytes: 4136 X-Received-Body-CRC: 3144416452 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit