Speichern einen Zeiger die Adresse eines unsigned int in C

Ist es möglich, aus ein Zeiger auf ein unsigned int, dann später warf es wieder zu einem Zeiger? Ich versuche zu speichern, die Zeiger auf eine struct in eine pthread_t variable, aber ich kann nicht scheinen, um es zu arbeiten. Hier einige Ausschnitte von meinem code (ich erstelle eine user-level-thread-management-Bibliothek). Wenn ich versuche, drucken Sie die tid des Threads es gibt mir einige lange garbage-Nummer.

Edit: Never mind, ich habe es zu arbeiten.

Änderte ich

thread = (pthread_t) currentThread;

zu

*thread = (pthread_t) currentThread;

Dachte, es war etwas doof so was.


Test-Programm:

pthread_t thread1;
pthread_t thread2;

pthread_create(&thread1, NULL, runner, NULL);
pthread_create(&thread2, NULL, runner, NULL);
pthread_join(&thread2, NULL);

Meine Bibliothek:

typedef struct queueItem
{
    int tid;
    ucontext_t context;

    int caller;

    struct queueItem *joiningOn;
    struct queueItem *nextContext;
} queueItem;

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
{
    thread = (pthread_t) currentThread;
}

...

int pthread_join(pthread_t thread, void **retval)
{
    queueItem *t = (queueItem *) thread;

    if(runningContext->joiningOn != NULL) //Current thread is already waiting on another
        return EINVAL;
    if(t == NULL) //If thread to join on is invalid
        return 0;

    fprintf(stdout, "JOINEE: %d\n", t->tid); //Prints weird number

    runningContext->caller = JOIN;
    runningContext->joiningOn = t;
    swapcontext(&(runningContext->context), &scheduleContext);
}
Ich verstehe nicht,--Sie definiert haben pthread_create in Ihrer eigenen Bibliothek? Warum machen Sie einen Namen in Konflikt mit der üblichen Funktion mit diesem Namen??
Es ist ein Projekt für die Schule.
Nevermind, habe es funktioniert. Bearbeitet meinem ursprünglichen post.

InformationsquelleAutor Anthony C. | 2012-04-29

Schreibe einen Kommentar