首页 > 编程知识 正文

qt线程间通信方式,多线程消息队列

时间:2023-05-03 12:14:31 阅读:59158 作者:3212

#包含

#包含

#包含

intbuf[1000000];

intw=0,r=0; //r是读取指针,w是写入指针

intsize=10; //缓冲区大小

pthread_mutex_tlock; //锁定

pthread_cond_tis_empty; //缓冲器是否为空

pthread_cond_tis_full; //缓冲器是否已满

发送void*sender(void*a )//100个数据

{

inti,j,k;

for(I=1; I

{

pthread_mutex_lock(lock; //锁定

if(w-rsize )//缓冲区是否已满

缺点是,如果在unlock和pthread_cond_signal之间有低优先级线程在mutex上等待,则会优先考虑高优先级线程(调用pthread_cond_wait的线程) 这在上面中间的模式下不会发生。 缺点是,如果低优先级线程在mutex中等待,则在unlock和pthread_cond_signal之间,该低优先级线程将调用高优先级线程(pthread_cond_wait ) lied 这在上面的中间模式中不会出现,mutex互斥锁通常是锁定(pthread_mutex_timed_np )或自适应锁定(pthread_mutex_adaptive_np ),并且

buf[w ]=i; //缓冲区中有空间,需要发送

printf(%d----/n )、I ); //打印

读线程从共享资源读取数据的同时,写线程需要向共享资源写入数据的linux多线程通信。 如果多个读/写线程共享一个资源(缓冲区),则必须根据需要使用独占锁(独占锁) (如critical section或独占量)来控制对资源的访问,但读取操作频繁,写入操作相对较少使用独占锁不划算的读线程必须从共享资源读取数据,而写线程必须将数据写入共享资源。 如果多个读/写线程共享一个资源(缓冲区),则必须根据需要使用独占锁(独占锁) (如criticalsection或独占量)来控制对资源的访问,但读取操作频繁,写入操作相对较少为每个需要更多时间和时间的工作线程创建管道,fds[0]用于工作线程接收来自主进程的数据,fds[1]用于主进程向工作线程发送数据。 这里的数据只作为信号。 thread_setup (为每个事件创建独立的事件域t-base,并在t-base中注册管道id

Phread_mutex_unlock(lock; //解除锁定

}

返回;

}

接受语音*接收器(语音* a )//数据

{

intx;

while(1)。

{

pthread_mutex_lock(lock; //锁定

if(r==w )//缓冲区中是否有数据

Pthread_cond_wait(is_empty,lock ); //没有数据,等待发送线程发送数据

x=buf[r ]; //有数据了。 我来拿

if(x!=0)

printf(----%d/n )、x ); //打印

else

布雷克; //发送数据-接受完毕后,退出线程

Pthread_cond_signal(is_full; //缓冲器中至少有一个允许发送进程发送数据的区域

Phread_mutex_unlock(lock; //解除锁定

}

返回;

}

intmain () )

{

短信(buf,0,sizeof ) buf );

pthread_ta,b; //做两个线程

//初始化

pthread_mutex_init(lock,NULL );

Phread_cond_init(is_full,NULL );

pthread_cond_init(is_empty,NULL );

//线程开始工作

phread_create(a,NULL,sender,0 );

pthread_create(b,NULL,receiver,0 );

语音*回复; //线程结束时,保存回收的数据

phread_join(a,recycle ); //回收资源

phread_join(b,recycle ); //回收资源

返回0;

}

本文来自电脑杂谈,转载请注明正文网站:

http://www.pc-缓慢的小蝴蝶.com/a/jisuanji Xue/article-111970-1.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。