Articles of pthreads

pthread与PHP 7.0.8(ZTS)

我想用PHP 7.0.8(ZTS)(手动编译和configuration)使用pthreads我已经在编译php时添加followinGconfiguration: –enable-maintainer-zts \ –enable-pthreads=shared \ –with-tsrm-pthreads \ 注意:fpm正在运行,pid 25546 注意:准备处理连接 我使用pecl: pecl install pthreads-3.1.6添加pthread扩展,并将extension = pthreads.so添加到我的php.ini中。 但重启php7-fpm后,php-fpm没有运行: 注意:正在完成… 注意:退出,再见! 我有一个502 nginx错误。 如何在php.ini中添加这个扩展名而不退出php-fpm?

在使用读写锁的pthread散列表中读取性能差

我已经把一个简单的关键值存储放在一起,它说的是Redis协议的一个子集。 它使用Linux上的pthreads来共享哈希表; 我使用pthreads rwlocks来pipe理对这个表的访问。 我一直在使用Redis基准testing工具testingKV商店。 有了一个客户端,我可以每秒做大约2500次SET操作。 但是,它只能做到每秒25个GET。 我期望别的方法,所以这让我感到惊讶。 它在某种程度上可以扩展,所以如果我扔10个客户端,我会得到每秒近9000个SET和每秒250个GET。 我的GET代码很简单, 我locking表,find合适的散列表位置,并检查链接列表中的匹配键。 对于GET,当我完成时,我使用pthread_rwlock_rdlock和pthread_rwlock_unlock 。 对于SET,我使用pthread_rwlock_wrlock和pthread_rwlock_unlock 。 SET比GET复杂得多。 我还使用共享内存进程和自己的读/写锁实现了Plan 9的代码。 在那里,GET几乎和SET一样快,而不是慢100倍。 这让我觉得我的哈希表代码可能是好的; 我使用两个操作系统完全相同的哈希表代码,我只是使用#defines为每个操作系统select合适的锁(在两种情况下,接口是相同的,幸运的!)。 我对pthreads不是很有经验。 谁能帮我弄清楚为什么我的performance太糟糕了? (注意:这不是一个高性能的KV商店,它是一个天真的书面testing应用程序/基准testing程序,通过为每个客户端分离一个新的线程,以最简单的方法处理请求)

在Linux中控制Semaphore队列中的出队顺序

我想要实现的代码,我想分配几个“优先号码”不同的线程。 一些线程可能在同一个信号上等待。 假设线程在信号量S上排队,另一个线程在信号量S上执行一个sem_post。一旦sem_post被执行,我想要在信号量S队列中具有最高“优先级号码”的线程获得对信号量的访问而不是任何其他线程。 据我所知,没有直接的方法来实现这一点,因为将被select访问的线程可以是队列中的任何一个元素(不一定是FIFO等)。 事实上,我试图增加线程的pthread优先级,但我意识到它也不工作。 有人可以指导我如何实现这个devise,在C. Thankyou提前手动控制信号量队列。

pthread_detach()在64位Linux上导致SIGSEGV

这是我的情况的描述:我必须照顾我们的产品中的错误。 线程被创build为joinable ,它必须完成它的工作,终止,没有人会为它调用pthread_join() 。 所以线程是使用JOINABLE属性创build的(默认情况下),在终止之前调用下一个代码: { pthread_detach(pthread_self()); pthread_exit(NULL); } 它在我遇到的所有32位Linux发行版中都像一个魅力,但它导致了64位发行版(Ubuntu 13.04 x86_64和Debian)上的SIGSEGV 。 我没有尝试与Slackware。 这是一个核心: Core was generated by `IsaVM -s=1 -PrjPath="/home/taf/Linux_Fov_540148/Cmds" -stgMode=1 -PR -Failover'. Program terminated with signal 11, Segmentation fault. #0 0x00007f5911a7c009 in pthread_detach () from /lib/x86_64-linux-gnu/libpthread.so.0 (gdb) bt #0 0x00007f5911a7c009 in pthread_detach () from /lib/x86_64-linux-gnu/libpthread.so.0 #1 0x000000000041310d in _kerCltDownloadThr (StartParams=0x6bfce0 <RESFOV>) at […]

Windows线程的移植在Android OS上运行

这是我面临的一个非常严重的危机。 我有一个为Windows和Windowsdevise的应用程序线程在我的代码中使用。 这是我想要将我的应用程序移植到Android的scenerio,我知道Windows线程不能在Android操作系统上运行。 任何机构可以告诉我如何改变我的线程,以支持Android。 在P线程中重写线程是不错的select,但有没有简单的方法来支持现有的Windows线程在Android上的multithreading。 在Windows和Linux上进行线程处理 我介绍了上面的链接,它讲述了使用boost::thread.在Linux和Windows中进行boost::thread. 但问题是在lib是在C++和我的代码是在C 期待您的input,轻松过渡到我的android应用程序的Windows线程线程。 提前致谢

使用pthread_join()

我想知道,如果我们做一个没有pthread_join的pthread_create ,会发生什么? 谁将“清理”“未join”线程的所有内存。

等待线程/ s直到onther线程/ s结束c ++ linux操作系统

我有三个函数在我的项目用c ++编写,在同一个.cpp文件中,我有两个.h文件。 现在,我有三个对应的线程,第二个线程从第一个线程获取输出,最后一个线程等待,直到第二个线程结束其操作。注意线程在“永久循环”中使用iewhile(1) {} …. //source.cpp看起来像这样: #include <iostream> #include "source.h" #include "glob_variables.h" #include "armadillo" #include <vector> using namespace arma; using namespace std; void source::first_function(int size) { for(int i=0;i<size;i++) { container.push_back(i);//container is global variable vector of type int declared in glob_variables.h } } //~~~~~~~~~~~~~~~~~~~~~~ void source::second_function() { //sleep until the first function fills the the vector […]

while循环同步

我正在用一个用户定义的线程数,我正在使用7的项目。 我有一个while循环运行在每个线程,但我需要所有的线程在while循环结束时等待对方。 棘手的是,一些线程并不都是通过循环结束的次数。 void *entryFunc(void *param) { int *i = (int *)param; int nextPrime; int p = latestPrime; while(latestPrime < testLim) { sem_wait(&sem); nextPrime = findNextPrime(latestPrime); if(nextPrime != -1) { latestPrime = nextPrime; p = latestPrime; } else { sem_post(&sem); break; } sem_post(&sem); if(p < 46341) { incrementNotPrimes(p); } /* sem_wait(&sem2); doneCount++; sem_post(&sem2); while(go != […]

什么是pthread_mutex **的“默认互斥体属性”

在像pthread_mutex_init这样的界面的手册页中, int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); 它说:“ 如果attr为NULL,默认的互斥体属性被使用… ”,并且the default mutex attributes被多次提及,并且在The Linux Programming Interface ”一书中也提到了这一点,但是从来没有详细解释过,我GOOGLE了,没有结果。 有一篇post,pthread互斥体的“属性”是什么? ,并提到“通常情况下,默认值是一组明智的属性,但可能因平台而异”,但这不是我想要的,我想了解更多的细节。 那么,究竟default mutex attributes什么?

执行的线程数比创build的多

我正在学习线程编程。 在做下面的例子时,我得到了未定义的行为。 static void* print_thread_attr (void* param) { pthread_attr_t attr; int detach_state = PTHREAD_CREATE_JOINABLE; pthread_getattr_np (pthread_self(), &attr); pthread_attr_getdetachstate (&attr, &detach_state); pthread_attr_destroy (&attr); printf("Detach state of thread [%u] pid [%d] is %s\n", pthread_self(), getpid(), (PTHREAD_CREATE_JOINABLE == detach_state)? "JOINABLE THREAD":"DETACHED THREAD"); return NULL; } void test_thread_attributes () { pthread_t thread_id1; pthread_t thread_id2; pthread_attr_t attr; printf("main pid [%d]\n", […]