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)
请帮我避免我的困惑:(
你正在做的是通过价值.只要您尝试通过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)