gpt4 book ai didi

c - Glib:如何在另一个线程完成之前启动一个新线程?

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:58 24 4
gpt4 key购买 nike

我正在使用 Glib 开发多线程 C 软件。

我想要一组活跃的线程。一旦某个线程完成,另一个线程就会以不同的参数启动。它有点像线程池。

我正在使用 glib thread实现多线程。但是我找不到很多来自谷歌的教程。我现在可以启动一组线程,但对等待一无所知。我的一些代码:

GThread *threads[n_threads];
thread_aux_t *data = (thread_aux_t*) calloc(n_threads, sizeof(thread_aux_t));
for (i = 0; i < n_threads; ++i) {
data[i].parameter = i;
threads[i] = g_thread_create((GThreadFunc) pe_lib_thread, data + i,
TRUE, NULL);
}

/* wait for threads to finish */
for (i = 0; i < n_threads; ++i) {
g_thread_join(threads[i]); // How to start a new thread depending on the return value?
}
free(data);

谢谢。


问题解决了。更新:

刚刚找到了 glib 的线程池实现:Thread Pools .我已经运行它并且它工作正常。代码写成:

// 'query' is for this new thread, 
// 'data' is the global parameters set when initiating the pool
void *pe_lib_thread(gpointer query, gpointer data) {
}

void run_threads() {
GThreadPool *thread_pool = NULL;
// Global parameters by all threads.
thread_aux_t *data = (thread_aux_t*) calloc(1, sizeof(thread_aux_t));

data->shared_hash_table = get_hash_table();
g_thread_init(NULL);
thread_pool = g_thread_pool_new((GFunc) pe_lib_thread, data, n_threads,
TRUE, NULL);
// If n_threads is 10, there are maximum 10 threads running, others are waiting.
for (i = 0; i < n_queries; i++) {
query = &queries[i];
g_thread_pool_push(thread_pool, (gpointer) query, NULL);
}
g_thread_pool_free(thread_pool, 0, 1);
}

最佳答案

g_thread_join返回的是返回值,所以你查一下就行了。如果返回值为 17,假设您想创建一个新进程。

for (i = 0; i < n_threads; ++i) {
if (threads[i] && g_thread_join(threads[i]) == 17) {
/* Start a new thread. */
threads[i] = g_thread_create((GThreadFunc) pe_lib_thread, data + i,
TRUE, NULL);
} else {
threads[i] = NULL;
}
}

关于c - Glib:如何在另一个线程完成之前启动一个新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14273238/

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