Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

21

06.11.2006, 20:21

Unter einigen Linuxdis ist das so. Linux/Unix kannte nämlich lange Zeit keine Threads. Daher haben die Programmierer mit Libs geschummelt, die die Threads in einen neuen Prozess verpackt haben. Unter Win ist das ein wenig anders geregelt. Z.B. laufen bei mir gerade 34 Prozesse und 405 Threads.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

22

06.11.2006, 20:27

Ein Prozess ist so definiert, das er mehrere Threads haben kann aber nur einen Adressraum. Wenn du eine Anwendung startest, hast du automatisch immer genau einen Adressraum und genau einen Thread. Diese Anwendung kann aber mehrere Threads erstellen und diese auch wärend ihrer Laufzeit beenden.

In Unix gibt es z.b. das fork, welches aus einen Vater Prozess einen Kind Prozess macht, der Kind Prozess ist auser seiner ID identisch mit dem Vater (gleiche Anzahl Threads etc.) Vllt. schreibe ich mal sowas wie einen (technischen?) Artikel "Probleme bei Multithreading", wie schreibe ich "Critical Sections" etc. dadurch würde das Thema abgerundet sein, muss ich aber erst FlyingDragon fragen, und Zeit haben ^^.

FlyingDragon

Frischling

  • »FlyingDragon« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Sachsen

Beruf: Consultant / Software Architekt

  • Private Nachricht senden

23

06.11.2006, 20:30

Zitat von »"koschka"«

In Unix gibt es z.b. das fork, welches aus einen Vater Prozess einen Kind Prozess macht, der Kind Prozess ist auser seiner ID identisch mit dem Vater (gleiche Anzahl Threads etc.) Vllt. schreibe ich mal sowas wie einen Artikel "Probleme bei Multithreading", wie schreibe ich "Critical Sections" etc. dadurch würde das Thema abgerundet sein, muss ich aber erst FlyingDragon fragen, und Zeit haben ^^.

Mach ruhig. Je mehr Tutorials um so besser. Ich wollte nur mal eine neue Schiene anregen, da die meisten Tuts immer nur mit Grafik, Sound und Physik zu tun haben ;)
Achtung! Das Lesen dieses Beitrags kann Ihnen und den Menschen in ihrer Umgebung erheblichen Schaden zufügen.
___________
Mein Leben, Freunde und die Spieleentwicklung

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

24

06.11.2006, 20:35

Ok vielen Dank, mal sehen wo wir es einsortieren werden, es soll ja kein Tutorial an sich werden, sondern eher wie Threads durch Betriebssysteme realisiert werden, wie Critical Sections aufgebaut sind (non blocking, blocking etc.) aber back to topic.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

25

06.11.2006, 20:59

Hach, diese Antworten sind ja mal das beste Beispiel das wir noch lange was am Forum haben werden =) Danke an alle, so ausführlich hätte ich das garnicht erwartet.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

26

10.11.2006, 10:05

Flying Dragon du hast oben was von einer Threadklasse geschrieben die du erstellt hast, die würde mich interessieren.

Sheddex

unregistriert

27

10.11.2006, 14:55

Jo genau, zeig' die mal, hab' auch eine geschrieben, die kann aber nur:
CreateThread();
DestroyThread(); (ka ob man das echt so nennen sollte)
StartThread();
StopThread();

Es gibt sicher noch viel mehr tolle sachen da da rein könnten =)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

28

10.11.2006, 18:57

Z.B. ein Entwurf für eine Netzwerksichere Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
template <class T> class SecureList : private std::list<T>
{               
    #ifdef _WIN32
    CRITICAL_SECTION Critic;
    #else
    pthread_mutex_t Critic;
    #endif

public:
#ifdef _WIN32
    SecureList(void)                            { InitializeCriticalSection(&Critic); }
    ~SecureList()                               { DeleteCriticalSection(&Critic); }
    
    inline void lock(void)                      { EnterCriticalSection(&Critic); }
    inline void unlock(void)                    { LeaveCriticalSection(&Critic); }
#else
    SecureList(void)                            { pthread_mutex_init(&Critic, NULL); }
    ~SecureList()                               { pthread_mutex_destroy(&Critic); }
    
    inline void lock(void)                      { pthread_mutex_lock(&Critic); }
    inline void unlock(void)                    { pthread_mutex_unlock(&Critic); }

#endif  

    inline std::list<T>::iterator begin(void)                           { lock(); return std::list<T>::begin(); }   //ACHTUNG: begin führt automatisch einen lock durch

    inline void clear(void)                                             { lock(); std::list<T>::clear(); unlock(); }
    inline std::list<T>::iterator  erase(std::list<T>::iterator &it)    { lock(); return std::list<T>::erase(it); unlock(); }           //ACHTUNG: Liste sollte vorher gelockt sein! 

    inline void push_back(const T e)                                    { lock(); std::list<T>::push_back(e); unlock(); }
    inline void push_front(const T e)                                   { lock(); std::list<T>::push_front(e); unlock(); }
    inline std::list<T>::iterator end(void)                             { return std::list<T>::end(); }
    inline size_type getSize(void)                                      { return std::list<T>::size(); }
};

Nimmt einem einiges an Arbeit ab 8)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

FlyingDragon

Frischling

  • »FlyingDragon« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Sachsen

Beruf: Consultant / Software Architekt

  • Private Nachricht senden

29

10.11.2006, 19:31

Zitat von »"rewb0rn"«

Flying Dragon du hast oben was von einer Threadklasse geschrieben die du erstellt hast, die würde mich interessieren.

Meine Threadklasse hab ich von einer bestehenden Threadklasse aus irgendeiner API abgekupfert. Leider hab ich den quelltext schon gelöscht. Mit etwas googlen findet man aber schöne Beiträge:

So in etwa sah meine Klasse auch aus:
http://www.geocities.com/SiliconValley/Heights/6038/dthreads.html
Auch sehr interessant:
http://www.codeguru.com/cpp/misc/misc/threadsprocesses/article.php/c3793/
Achtung! Das Lesen dieses Beitrags kann Ihnen und den Menschen in ihrer Umgebung erheblichen Schaden zufügen.
___________
Mein Leben, Freunde und die Spieleentwicklung

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

30

10.11.2006, 20:18

Was mich vor allem interessieren würde ist, ob einfache Getter und Setter gesperrt werden sollten. Eigentlich doch eher nicht oder, bei einer Anweisung?

Werbeanzeige