Tag: pthreads

并行合并使用线程排序/比Seq更多/更慢。 合并排序。 救命

http://pastebin.com/YMS4ehRj 这是我对并行合并排序的实现。 基本上我所做的是,对于每一次拆分,前半部分由一个线程处理,而后半部分是顺序的(即)说我们有一个包含9个元素的数组,[0..4]由线程1处理,[0 ..1]处理线程2,[5..6]由线程3处理(查看源代码以便澄清)。 其他一切都保持不变,比如合并。 但问题是,这比合并排序慢得多,甚至比正常的冒泡排序慢! 我的意思是一个25000 int的数组。 我不确定瓶颈在哪里:它是互斥锁吗? 是合并吗? 关于如何加快速度的任何想法?

什么是multithreading等待的`pthread_mutex_lock()`唤醒命令?

假设我在调用pthread_mutex_lock()有多个线程阻塞。 当互斥锁变得可用时,调用pthread_mutex_lock()的第一个线程是否获得锁定? 也就是说,是按FIFO顺序调用pthread_mutex_lock() ? 如果不是,那么它们的订单是什么? 谢谢!

修改数组中的一个元素而另一个线程修改同一数组的另一个元素时,它是定义良好的行为吗?

给定一个类型为foo_t[n]的数组和一组n个线程,其中n个线程中的每个线程都读取并修改数组的不同元素,我是否需要显式同步数组的修改,或者我可以假设同时修改成员数组是明确定义的行为? 它有多大foo_t /它的对齐方式有关系吗?

可以安全地在线程之间共享整数吗?

在没有任何同步实用程序的情况下,在C程序中的pthread之间使用相同的整数内存位置的多个线程是否存在问题? 为了简化问题, 只有一个线程会写入整数 多个线程将读取整数 这个伪C说明了我的想法 void thread_main(int *a) { //wait for something to finish //dereference ‘a’, make decision based on its value } int value = 0; for (int i=0; i<10; i++) pthread_create(NULL,NULL,thread_main,&value); } // do something value = 1; 我认为它是安全的,因为一个整数占用一个处理器字,读取/写入一个字应该是最primefaces的操作,对吧?

是否保证pthread_cond_signal会唤醒等待的线程?

这是一个普遍的问题。 例如,当前有两个子线程调用了pthread_cond_wait(&cond1,&mutex) ,它们都在等待。 然后,父线程调用 pthread_cond_signal(&cond1); pthread_cond_signal(&cond1); 接下来,我的问题是,是否可以保证两个等待线程都会被唤醒?(假设第一个线程被唤醒,稍后在执行的某个阶段释放互斥,以便第二个线程可以获取它)。 我问这个问题的原因是,对于Unix系统级信号,信号(比如SIGCHLD )没有排队,因此如果连续传送多个相同类型的信号可能会丢失。 所以我想知道pthread_cond_signal是以不同方式实现的,这样如果调度程序碰巧让父线程连续两次发出信号,它们就不会丢失?

睡眠function是睡眠所有线程还是只调用它的人?

我在linux(Centos)上用pthread编程? 我想让线程在短时间内等待一些事情。 我正在尝试使用sleep(),nanosleep()或者usleep(),或者也许可以做到这一点。 我想问一下:睡眠function是睡眠所有线程还是只调用它的人? 任何建议或参考将不胜感激。 void *start_routine () { /* I just call sleep functions here */ sleep (1); /* sleep all threads or just the one who call it? what about nanosleep(), usleep(), actually I want the threads who call sleep function can sleep with micro-seconds or mili-seconds. */ … } int main (int […]

在windows build上使用pthread.h

我有一个广泛使用pthread.h的代码库。 在Windows visual studio项目中,这显然不起作用,因为pthreads是一个unix实用程序。 我知道存在pthread-win32或类似的东西,但有没有办法让代码库使用它,而不替换所有的pthread代码? 编辑:我宁愿不必经历并替换所有的pthread调用。 这是我的问题

用于create_pthread()调用的cast成员函数

我想停止警告 server.cpp:823:警告:从’void *(ClientHandler :: )()’转换为’void ( )(void )’ 在电话中: pthread_create(th, NULL, (void* (*)(void*)) &ClientHandler::handle, (void *) clientHandler); 其中handle()是ClientHandler的成员函数: void* ClientHandler::handle(); 我很难从编译器中解密函数类型的消息。 问题是: 我应该更改handle()接口吗? 我可以摆脱整体铸造吗? 我应该改变演员吗? 到底是什么? 完全不同的东西?

如何修复gcc错误:在void之前预期

所以我正在编写一个使用pthread来管理所有IO的点对点聊天客户端,当我编译文件时,gcc给了我错误 client.c: In function ‘accepted_daemon’: client.c:115:1: error: expected ‘while’ before ‘void’ void * ^ client.c: In function ‘listen_daemon’: client.c:176:1: error: expected ‘while’ before ‘int’ int main(int argc, char *argv[]) ^ 我的程序的源代码是 #include #include #include #include #include #include #include #include #include #define error(s, e, …) error_at_line (s, e, __FILE__, __LINE__, __VA_ARGS__) #include #include #include #include #define […]

pthread_mutex_lock返回无效参数

我正在研究一些C代码,并且遇到锁定互斥锁的问题。 代码调用一个函数,这个函数锁定一个互斥锁,以确保文件指针不被覆盖,这适用于几个实例,可能大约10-20个单独调用被调用函数,但在下一次调用时,pthread_mutex_lock将返回22的结果。然后我将此结果放入strerror(); 并得到了无效的论点。 无效参数意味着什么,感谢您提供的任何帮助。