使用pthread输出简单程序

时间:2013-05-14 14:36:32

标签: c++ c multithreading pthreads

void cleanupHandler(void *arg) { 
    printf("In the cleanup handler\n");
}
void *Thread(void *string) { 
    int i;
    int o_state;
    int o_type;
    pthread_cleanup_push(cleanupHandler, NULL);
    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &o_state);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &o_type);
    puts("1 Hello World");
    pthread_setcancelstate(o_state, &o_state);
    puts("2 Hello World");
    pthread_cleanup_pop(0);
    pthread_exit(NULL);
}
int main() { 
    pthread_t th;
    int rc;
    rc = pthread_create(&th, NULL, Thread, NULL);
    pthread_cancel(th);
    pthread_exit(NULL);
}

我想知道这段代码的输出是什么以及它们将以什么顺序发生。是的,这是我在6小时内完成的考试的练习题。任何帮助将不胜感激。今天没有办公时间,因为我大学的所有TA都忙于自己的决赛。

由于

2 个答案:

答案 0 :(得分:0)

以下是您需要了解他们将在考试中遇到的问题的手册页(这肯定不是上面的确切问题。)因此,您需要了解每个函数的作用。

在这个问题中(可能是你考试中的类似问题),你需要枚举两个线程之间对这些函数的所有可能的调用交错。

答案 1 :(得分:-2)

1 Hello World
2 Hello World

为什么不编译它并运行它?这个版本编译并运行。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void cleanupHandler(void *arg) {
    printf("In the cleanup handler\n");
}
void* Thread(void *string) {
    int i;
    int o_state;
    int o_type;
    sleep(1);
    pthread_cleanup_push(cleanupHandler, NULL);

    sleep(1);//Note that when you uncomment lines, you should uncomment them in order.
    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &o_state);
    sleep(1);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &o_type);
    puts("1 Hello World");
    sleep(1);
    pthread_setcancelstate(o_state, &o_state);
    sleep(1);
    puts("2 Hello World");
    pthread_cleanup_pop(0);
    pthread_exit(NULL);
}

int main() {
    pthread_t th;
    int rc;
    rc = pthread_create(&th, NULL, Thread, NULL);
    pthread_cancel(th);
    pthread_exit(NULL);
}