Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [?] chiamata pthread_exit() sul main thread

    ciao a tutti,
    ho un problema con la chiamata pthread_exit().
    Il main thread ,che va per primo in esecuzione, crea un altro thread. In seguito a tale creazione il main fa una chiamata pthread_exit(). Da quello che ho trovato in rete mi sembra di capire che il secondo thread dovrebbe continuare a girare, invece sembra come se le variabili dichiarate nel secondo thread scomparissero (nello specifico sparisce una socket).
    Sapete dirmi come mai?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ma per main thread intendi il main vero e proprio? Perché se è così il programma dovrebbe terminare senza troppi complimenti, thread secondari inclusi.

  3. #3
    si intendo il main...
    avresti documentazione ufficiale dove si esplicita che se il thread principale termina prima degli altri, gli altri vengono terminati con lui?
    io per ora ho trovato diversi siti che riportano frasi del genere:

    If main() finishes before the threads it has created, and exits with pthread_exit(), the other threads will continue to execute. Otherwise, they will be automatically terminated when main() finishes.

    saluti

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non conosco molto bene i pthreads, ma non credo differiscano molto dai winthreads come principio di funzionamento.
    In tutti gli esempi che ho visto, viene chiamata una pthread_join per attendere che il thread termini e viene fatto prima che il main termini.
    http://www.yolinux.com/TUTORIALS/Lin...ixThreads.html

    Forse facendo un pthread_detach del thread, ottieni lo scopo che vuoi tu. Però ogni thread dovrebbe usare variabili usate in loco e che non facciano riferimento all'heap del processo chiamante. Se quello termina, viene distrutto anche l'heap. (In windows è così almeno.)

    In più a quanto ho capito, il comportamento è implementation defined.
    http://publib.boulder.ibm.com/iserie...s/users_18.htm
    OS400 ad esempio.

  5. #5
    allora, ti spiego il comportamento che voglio ottenere.
    nel main thread io posso anche usare la pthread_join per aspettare che il thread creato termini...
    quello che vorrei è che il processo (tutto quindi) liberi la console.
    Solo che non riesco a trovare il modo per liberare la console.
    Su windows il programma è impostato così:
    main()
    {
    CreateThread(...);
    ExitThread();
    }

    thread1()
    {
    FreeConsole();
    .......
    .......
    }

    La console viene liberata dal thread1 creato con FreeConsole(), e anche dal main facendo ExitThread(). Infatti torna disponibile. Il processo comunque è ancora in esecuzione perchè è in esecuzione il thread1.
    Come posso ottenere lo stesso comportamento su linux?
    saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.