查询多线程程序

Vij*_*jay 0 c c++ unix multithreading pthreads

这可能是一个简单的查询.

当我们创建一个线程时,我们将(void*)t作为参数传递给函数PrintHello.we正在将tid中的指针threadid中的值复制(将其设置为long),这又是一个long变量.我很困惑参数传递.这是一个通过引用传递或通过值传递.所有这是正确的吗? (value *)t.它究竟通过了什么价值?

long t;
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
Run Code Online (Sandbox Code Playgroud)

请帮我避免我的困惑:(

Geo*_*che 5

你正在做的是通过价值.只要您尝试通过sizeof(T) <= sizeof(void*)的类型,它就可以了T.

如果不是这种情况,您应该T在堆上创建一个,因为当创建的线程尝试访问它时它可能超出范围:

T* t = new T(someValue);
rc = pthread_create(&threads[t], NULL, PrintHello, (void*)t);
Run Code Online (Sandbox Code Playgroud)