zoukankan      html  css  js  c++  java
  • 线程私有数据

    参考

    Posix线程编程指南(2)
    
    
    范例的代码其实意义不大,child2函数完全没有必要。作者没有解释对于struct等复杂类型该如何做的问题,也就是为什么会有echomsg的问题。

    1.echomsg 其实是个注册的destructor,永远释放在线程中分配的私有数据,由于pthread_setspecific(key,(void *)tid);只能对指针进行操作,所以malloc之类的操作必不可少。
    
    
    2.对于struct的读写,需要分配一个struct类型的变量。
    具体的代码如下。
    #include <stdio.h>
    #include
    <stdlib.h>
    #include
    <pthread.h>
    #include
    <unistd.h>
    struct thread_block
    {
    pthread_t tid;
    long start;
    long end;
    };


    pthread_key_t key;
    void
    freeblock (
    struct thread_block *pt)
    {
    printf (
    "thread %lu\t start %lu \t end %lu\n", pt->tid, pt->start, pt->end);
    free (pt);
    }

    void *
    child1 (
    void *arg)
    {
    int tid = pthread_self ();
    printf (
    "thread %d enter\n", tid);
    struct thread_block *pt =
    (
    struct thread_block *) malloc (sizeof (struct
    thread_block));
    pt
    ->tid = tid;
    pt
    ->start = *(int *) arg;
    pt
    ->end = pt->start + 1000;

    pthread_setspecific (key, (
    void *) pt);
    sleep (
    2);
    printf (
    "thread %d\n", tid);
    sleep (
    5);
    }

    int
    main (
    void)
    {
    int tid1, tid2;
    int start = 100;
    printf (
    "hello\n");
    pthread_key_create (
    &key, freeblock);
    pthread_create (
    &tid1, NULL, child1, &start );

    start
    += 1000;
    pthread_create (
    &tid2, NULL, child1, &start);
    sleep (
    10);
    pthread_key_delete (key);
    printf (
    "main thread exit\n");
    return 0;
    }

      请注意黑线表示的语句是变化的了的。


  • 相关阅读:
    那些不能错过的Xcode插件
    iOS开发过程中使用Core Data应避免的十个错误
    define和typedef
    #号运算符
    第三方移动后端服务开发
    9款优秀的APP免费测试框架
    网络协议初探(二)
    iphone第三方库
    HTTP状态码
    JDK8新特性:在JDK8中,默认添加final
  • 原文地址:https://www.cnblogs.com/westfly/p/2169863.html
Copyright © 2011-2022 走看看