Statischen Semaphore innerhalb Threadmethode



  • Hi

    Wie löse ich folgendes Problem:

    class test {
    
    private:
    
    	static int semaphore;
    
    	static DWORD WINAPI runbla(LPVOID lp){
    		// Eintreten in kritischen Bereich anhand semaphore Bsp.:
    		semaphore = 1;
    		return 0;
    	}
    
    public:
    
    	void run(){
    		CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)runbla,NULL,0,NULL);
    	}
    
    };
    
    int main(int argc, char* argv[])
    {
    	test t;
    	t.run();
    	return 0;
    }
    

    test.obj : error LNK2001: unresolved external symbol "private: static int test::semaphore" (?semaphore@test@@0HA)

    So viel ich weiss muss die Threadfunction statisch sein. Deshalb auch das Semaphore.

    MfG Joe



  • Hi

    Erstmal zu deinem Fehler (LNK 2001): Du musst "semaphore" noch außerhalb der Klasse deklarieren, also unter die Klasse noch ein "int test::semaphore;" schreiben. Wenn du die Klasse in eine Header- und Cppdatei auslagerst, dann gehört diese Zeile in die Cpp-Datei.
    Und richtig, die Thread-Func muss statisch sein 😉

    Und die Variable "Semaphore" soll anzeigen, ob ein Thread gerade läuft oder wie?



  • Was soll den das werden? Ich sehe in dem Code viel Potential für Blödsinn wenn ich das mal so sagen darf... eine normale Variable (nix volatile, nix interlocked etc.) im Zusammenhang mit den Wörtern "Thread" und "Sempahore"... das riecht schonmal faul.


Anmelden zum Antworten