1

Dlaczego próba kompilacji:

#include <mutex>

int main()
{
     mutex m;
}

kończy się tak:

m68k-atari-mint-gcc mutex.cpp
mutex.cpp: In function 'int main()':
mutex.cpp:5:5: error: 'mutex' was not declared in this scope
     5 |     mutex m;

?

Toolchain Thorsten'a oparty na gcc 9.x, ale strzelam, że Vincent'owy pewnie też tak się zachowa.

2

Nie wiem jak jest w tym środowisku z kompatybilnością ze standardem, ale ja bym spróbował std::mutex

3

Czy nazwa kompilowanego pliku mutex.cpp nie powoduje, że gcc próbuje dopasować plik nagłówkowy z tego katalogu gdzie masz mutex.cpp bo mutex.cpp implikuje mu lokalny plik nagłowkowy w tym katalogu a nie systemowy.
Zmień nazwę mutex.cpp

4

laoo/ng napisał/a:

Nie wiem jak jest w tym środowisku z kompatybilnością ze standardem, ale ja bym spróbował std::mutex

Żeby za każdym razem nie pisać "std::" można na początku dorzucić "use namespace std".

BartoszP napisał/a:

Czy nazwa kompilowanego pliku mutex.cpp nie powoduje, że gcc próbuje dopasować plik nagłówkowy z tego katalogu gdzie masz mutex.cpp bo mutex.cpp implikuje mu lokalny plik nagłowkowy w tym katalogu a nie systemowy.
Zmień nazwę mutex.cpp

Wtedy komunikat byłby o braku pliku nagłówkowego.

Zawsze mam rację, tylko nikt mnie nie słucha.

5

laoo/ng napisał/a:

Nie wiem jak jest w tym środowisku z kompatybilnością ze standardem, ale ja bym spróbował std::mutex

Dzięki za sugestię, ale niestety nie o to chodzi. Generalnie to w tym środowisku średnio jest z kompatybilnością ze standardem. Wiele rzeczy jest poza biblioteką standardową i std:: nie przechodzi, i w tym przypadku też na pewno tak jest.

Lizard napisał/a:

Wtedy komunikat byłby o braku pliku nagłówkowego.

Zgadza się.

6

A nie jest przypadkiem tam, że żeby Ci znalazło ten plik to musisz użyć kompilatora C++ (g++) zamiast zwykłego gcc?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

7

Hmm, jak tak nad tym chwilę podumałem, to może i faktycznie. Zdziwiłbym się w sumie mocno, ale warto spróbować.

8

g++ i gcc to takie proxy do prawdziwego kompilatora ustawiające specyficzne parametry. Wielokrotnie naciąłem się na to, że nie można wołać ich zamiennie.

Lizard napisał/a:

Żeby za każdym razem nie pisać "std::" można na początku dorzucić "use namespace std".

Wciąganie namespace std do głównej przestrzeni nazwa powinno być karate usunięciem delikwenta piszącego takie herezje z cechu programistów. Te przykłady na pół strony robiące takie rzeczy wyrządziły dużo złego propagując taki zwyczaj.

9

Na Mint-a/Atari nie ma implementacji pthread z tego co mi wiadomo, a tym samym nie ma mutexów :)

What can be asserted without proof can be dismissed without proof.

10 Ostatnio edytowany przez jury (2021-06-07 12:26:05)

Hmm, to by mogło tłumaczyć problem z kompilacją, tylko kurcze po co w takim razie zostały dodane wszystkie "wątkowe" nagłówki do toolchaina (mutex, conditional_variable, itd)?
Spróbuję z ciekawości w takim razie poszukać coś więcej w temacie braku wątków "u nas". Dzięki za wskazówkę.

11

laoo/ng napisał/a:

Wciąganie namespace std do głównej przestrzeni nazwa powinno być karate usunięciem delikwenta piszącego takie herezje z cechu programistów. Te przykłady na pół strony robiące takie rzeczy wyrządziły dużo złego propagując taki zwyczaj.

Na szczęście nie jestem programistą więc mogę sobie pozwolić na takie wyskoki.

Zawsze mam rację, tylko nikt mnie nie słucha.

12

jury napisał/a:

tylko kurcze po co w takim razie zostały dodane wszystkie "wątkowe" nagłówki do toolchaina (mutex, conditional_variable, itd)?

Bo nagłówki są dla wygody ale pewno "ifdefowane" na potrzeby danego środowiska i efektywnie są puste.
Zresztą sam sobie odpowiedziałeś:

jury napisał/a:

...

Lizard napisał/a:

Wtedy komunikat byłby o braku pliku nagłówkowego.

Zgadza się.

moje 0.02$ do tego ... gdyby gcc było tylko do C a nie  C++, to powinie "dżeć paszcze" o brak pliku "mutex." czyli bez rozszerzenia.
https://gcc.gnu.org/onlinedocs/gcc/Invo … voking-GCC
https://gcc.gnu.org/onlinedocs/gcc/Invo … _002b_002b

13 Ostatnio edytowany przez jury (2021-06-07 12:57:46)

BartoszP napisał/a:
jury napisał/a:

tylko kurcze po co w takim razie zostały dodane wszystkie "wątkowe" nagłówki do toolchaina (mutex, conditional_variable, itd)?

Bo nagłówki są dla wygody ale pewno "ifdefowane" na potrzeby danego środowiska i efektywnie są puste.

No właśnie tutaj nigdy nie zaobserwowałem takiego podejścia. Na przykład wiele "starych" bibliotek ciągnących się z gcc od dziesiątek już lat po prostu fizycznie brakuje w atarowskim toolchainie i już, a to byłby pierwszy przypadek na który trafiłiam, że nagłówki są ale nic poza tym. Co do samej zawartości nagłówków, to zaglądałem tam i nie wyglądały mi na "ifdefowane do pustki", ale zdarza mi się czasem kompletnie ominąć jakiś kawałek ifdef'a, więc może faktycznie tym razem tak została rozwiązana kwestia braku biblioteki. Z ciekawości zerknę dokładniej w te nagłówki (ale strzelam, że są pełnoprawne)

BartoszP napisał/a:

gdyby gcc było tylko do C a nie  C++, to powinie "dżeć paszcze" o brak pliku "mutex." czyli bez rozszerzenia.

W sumie racja

14

@sqward: jedynie GNU pth zostało sportowane (,ale czy działa? ;-)), https://freemint.github.io/sparemint/sp … devel.html. Ale GNU pth działa na poziomie userspace'a, nie kernela os'a. https://en.wikipedia.org/wiki/GNU_Portable_Threads. Ma niby emulację api pthreads (opcjonalną). To chyba jedyna opcja..

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

15 Ostatnio edytowany przez Nitro (2021-06-07 18:37:20)

Prawdopodobnie potrzebujesz implementacji jakiegoś konkretnego problemu a nie całej biblioteki.
https://greenteapress.com/wp/semaphores/
IMO klasyczne wprowadzenie do tematu, kod w czystym C i przejrzysty, platform agnostic, to kniga darmowa.

16

Dzięki. Przejrzałem sobie tą książkę i zapowiada się nieźle.