gpt4 book ai didi

C 线程,CVI : how to return array out of thread?

转载 作者:行者123 更新时间:2023-11-30 15:17:36 27 4
gpt4 key购买 nike

我在多线程程序方面遇到问题。假设我有一系列的几个整数数组(通常是 2 或 3 个),每个数组都由一个单独的线程处理。我设法进行计算,但现在我想返回在我的线程内创建的已处理数组。

启动线程后,我启动以下循环,每 0.05 秒检查线程是否完成。这似乎工作正常。

int partsPassed = 0;

int* partsCopied;
partsCopied = (int*) malloc (numThreads * sizeof(int));

int currentCopyStatus = 0;

for (n = 0; n < numThreads; n++) {
partsCopied[n] = 0;
}

// Loop until we copy all parts of array
while (partsPassed != numThreads) {

// Loop through all parts of original array
for (n = 0; n < numThreads; n++) {

if (partsCopied[n] != 1) {

// Check for finish of computation
CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_EXECUTION_STATUS, &currentCopyStatus);
if (currentCopyStatus == kCmtThreadFunctionComplete) { // If yes, get the array and copy to original array
CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_RETURN_VALUE, imageThreadPart[n]);
copyStaticThreadResults(imageRecPart[n]->nrRowStart, imageRecPart[n]->nrRowEnd, imageThreadPart[n]);
partsCopied[n] = 1; // Copy flag display
partsPassed++; // Count all fragments
}
}
}

Delay(0.05);

}

问题是,根据文档,我只能从线程中获取一个 int 值。当我尝试使用以下函数时,这会导致失败 - 我尝试获取 int** (存储在 imageThreadPart[n] 中的二维数组),并且该函数强制我传递 int*。

CmtGetThreadPoolFunctionAttribute(*threadPoolHandle, threadFunctionID[n], ATTR_TP_FUNCTION_RETURN_VALUE, imageThreadPart[n]);

<强>1。是否可以使用这个函数来获取这个数组?

<强>2。这可能是一个远景,但是否可以使用以下函数的回调来复制该数组,并将线程返回的值以某种方式直接传递给此回调?

CmtScheduleThreadPoolFunctionAdv (DEFAULT_THREAD_POOL_HANDLE, 
myThreadFunction, // thread function
imageRecPart[n], // my data
THREAD_PRIORITY_TIME_CRITICAL,
copyThreadResults, // my callback
EVENT_TP_THREAD_FUNCTION_END,
NULL, // data for callback - but how to pass it from thread here?!
CmtGetCurrentThreadID(),
&threadFunctionID[n]);

最佳答案

所有线程共享相同的内存空间,因此您可以将数组复制到共享内存中的已知位置(也许是传递给线程过程的位置,也许是全局变量,也许是线程为自己分配的缓冲区并传递一个指针到)。请注意,为了确保对数据的更新在通知已写入之前到达其他 CPU 核心,您需要使用具有 memory_order_release 语义的原子状态变量或自旋锁.

关于C 线程,CVI : how to return array out of thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com