linux多线程之间加usleep()。

我现在有个困惑:大致就是在一个TCP服务器中创建两个线程,一个接收消息并进行相应的处理,一个发送消息并进行相应的处理。
现在的情况就是我如果在两个线程之间加上usleep(100)的话,数据的传输不会丢包,具体线程处理函数就不必细说。
就单单这过程有什么门道吗?()

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
usleep和_usleep有什么区别
usleep和_usleep有什么区别
usleep在多线程中的替代方式
请提供一种或几种解决方案,让我使用其他方式来替代usleep的延时效果,谢谢各位。
Linux的sleep()和usleep()的使用和区别
让进程暂停执行一段时间 函数名: sleep -------------------------------------------------------------------------------  头文件: #include // 在VC中使用带上头文件         #include   // 在gcc编译器中,使用的头文件因gcc版本的不同而不同  功 
linux 多线程加互斥锁没用
程序执行结果: girl(0xb707fb70) withdraw 1000.000000 from Account 101n boy(0xb7880b70) withdraw 1000.000000 from Account 101naccount balance:0.000000n几个程序如下:naccount.c程序源码:n#include "account.h"n#include n#include n#include nn//create Accountn Account* create_account(int code,double balance)n Account *a = (Account*)malloc(sizeof(Account));n assert(a !=NULL);n a->code = code;n a->balance = balance;n //对互斥锁初始化n pthread_mutex_init(&a->mutex,NULL);n return a;n n//destroy Accountn void destroy_account(Account *a)n assert(a != NULL);n pthread_mutex_destroy(&a->mutex);n free(a);n n//qu moneyn double withdraw(Account *a,double amt)n assert(a != NULL);n pthread_mutex_lock(&a->mutex);n if(amt < 0 || amt > a->balance) n pthread_mutex_unlock(&a->mutex);n return 0.0;n nn double balance = a->balance;n sleep(1);n balance -= amt;n a->balance = balance;n pthread_mutex_unlock(&a->mutex);n return amt;n n//cun moneyn double deposit(Account *a,double amt)n assert(a !=NULL);n pthread_mutex_lock(&a->mutex);n if(amt < 0)n pthread_mutex_unlock(&a->mutex);n return 0.0;n n n double balance = a->balance;n sleep(1);n balance += amt;n a->balance = balance;nn pthread_mutex_unlock(&a->mutex);n return amt;n n//see moneyn double get_balance(Account *a)n assert(a != NULL);nn pthread_mutex_lock(&a->mutex);n double balance = a->balance;n pthread_mutex_unlock(&a->mutex);n return balance;n naccount.h头文件源码:n#ifndef __ACCOUNT_H__n#define __ACCOUNT_H__n#include ntypedef structnn int code;n double balance;n //定义互斥锁n pthread_mutex_t mutex;nAccount;n//create Accountnextern Account* create_account(int code,double balance);n//destroy Accountnextern void destroy_account(Account *a);n//qu moneynextern double withdraw(Account *a,double amt);n//cun moneynextern double deposit(Account *a,double amt);n//see moneynextern double get_account(Account *a);n#endifnn调用程序account-test.c源码:n#include "account.h"n#include n#include n#include n#include nntypedef structn char name[20];n Account *account;n double amt;nOperArg;n//取款操作线程运行函数nvoid* withdraw_fn(void *arg)n OperArg *oa = (OperArg*)arg;n double amt = withdraw(oa->account,oa->amt);n printf("%8s(0x%lx) withdraw %f from Account %d\n",oa->name,pthread_self(),n amt,oa->account->code);n return (void*)0;nnn//存款线程运行函数nvoid* deposit_fn(void *arg)n n OperArg *oa = (OperArg*)arg;n double amt = deposit(oa->account,oa->amt);n printf("%8s(0x%lx) deposit %f from Account %d\n",oa->name,pthread_self(),n amt,oa->account->code);n return (void*)0;nnnint main(void)n int err;n pthread_t boy,girl;n Account *a = create_account(101,10000);n OperArg o1,o2;n strcpy(o1.name,"boy");n o1.account = a;n o1.amt = 1000;n// OperArg o1 = "boy",a,1000;n n strcpy(o2.name,"girl");n o2.account = a;n o2.amt = 1000;n n if((err = pthread_create(&boy,NULL,withdraw_fn,(void*)&o1)) != 0)n perror("pthread create error");n n if((err = pthread_create(&girl,NULL,withdraw_fn,(void*)&o2)) != 0)n perror("pthread create error");n n pthread_join(boy,NULL);n pthread_join(girl,NULL);n printf("account balance:%f\n",get_balance(a));n destroy_account(a);n return 0;nnn请问为什么互斥锁不起作用啊?怎么解决啊,多谢!
linux 下sleep 和 usleep 函数 及 求数组大小
1、linux下 #include &amp;lt;unistd.h&amp;gt; int usleep(useconds_t usec); unsigned int sleep(unsigned int seconds); 注意:Windows下单位不同   sleep参数是uint,不能写小数,如sleep(0.5)==sleep(0)   2、求数组大小 int a[12]={0}; int...
(多线程)多线程之间的通信
  多线程之间通信 如生产者与消费者的通信,操作同一个共享资源 关键:通过一个标记来控制资源的状态,使用wait与notify/notifyAll实现线程的切换 生产者负责生产,满则等待,空则生产; 消费者负责消费,空则等待,有则消费;   单一生产者与消费者的时候,可以使用if判断标记,使用notify唤醒对方线程   如果在多生产者多消费者的情况下,必须使用while判断...
linux usleep函数参数溢出(睡眠多少微秒)
usleep函数的参数类型为unsigned int https://linux.die.net/man/3/usleep (1)usleep((0xffffff*1000)); (2) usleep((0xffffffff)); #include #include #include #include #include
Linux多线程Linux多线程
Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程
Linux多线程与进程之间通信 实例2
/* ************************************************************************ * Description: main.c * Version: 1.0 * Revision: none * Compiler: gcc * Company: * **********************************
linux 多线程编程, 实现多线程之间的 链表操作
问题1: 线程在添加链表节点的时候, 使用 malloc 动态创建空间, 这个空间地址是 所有线程共享的,还是 各自线程 独立的,如果是独立的 ,就不能共享 链表的数据了。rn问题2:如果是共享的,我一个提供者A线程 不断的向 链表中添加 节点数据, 同时提供者A自己实时打印节点数据, 消费者B线程 同时也不断的在读链表中的节点数据打印, 但是两个打印的结果不同,同一地址上的数据不一样,是我互斥没做好导致的数据改变了吗?rnrn求大神指导
usleep为什么会阻塞????
我在solaris下的一个程序,用popen执行一个命令取一些数据,rn每取到1K数据usleep(10)一下,rnrn因为数据量大,发现usleep阻塞了,为什么亚
Linux下usleep函数求教
usleep函数不能用于秒级以上的延时rn原因分析: 在某些系统中usleep接受的入参最大值必须小于1000000(即1秒)rn规避措施:rn1、 用sleep函数替代rn2、 通过多次usleep完成rn3、 其他rn说明:在Suse9/10上测试是没有问题的,但出于可移植性考虑,不要使用usleep作秒级以上的延时rnrn————————————————————————————————————————————rnrn小弟看博客读到这么一段描述,请问usleep参数大于1秒会出现什么情况呢?什么原因造成的?哪些系统会受影响啊,有没有高手深究过这个问题,点拨一下小弟呗
多线程快速入门+ 多线程之间通讯
多线程快速入门一、线程与进程的区别  二、为什么要用到多线程 三、多线程应用场景 四、使用继承方式创建线程 五、使用Runnable接口方式创建线程 六、使用匿名内部类方式创建线程  七、多线程常用api 八、守护线程与非守护线程 九、多线程几种状态 十、join方法介绍 十二、使用多线程分批处理信息 多线程之间通讯一、多线程之间通讯 多线程之间通讯需求需求:第一个线程写入(input)用户,另一...
恩,一个usleep的问题
我在函数中调用usleep(1000),rn循环1000次后,rnvoid main(void)rn printf("begin [%lu]\n",time(NULL));rn for(int i=0;i<1000;i++)rn usleep(1000); //rn rn printf("end[%lu]\n",time(NULL)); rnrn按照道理,应该是1秒中啊,为什么结果是20s呢,是不是linuxe下的cpu唤醒要20ms啊,rn谢谢!
请问sleep与usleep的区别
请问sleep与usleep是怎么样区别呢!这两者主要用在哪一方面的用途较多呢!
sleep和usleep的疑惑
sleep的精度是秒级的,usleep的精度是微秒级的。rn我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,结果如下:rn251rn502rn752rn1002rnrn另外,我把代码复制到其他机器上,发现结果各不相同,当然机器有好有坏。rn比较好机器的结果:rn951rn1902rn2853rnrn另一台配置不高的机器:rn51rn101rn152rn203rn254rn305rnrn代码如下:rn[code=C/C++]#include rn#include rn#include rn#include rnrnunsigned long long g_millisecond = 0;rnrnvoid *timer(void)rnrn sigset_t new_set;rnrn sigemptyset(&new_set);rn sigaddset(&new_set, SIGINT);rn sigaddset(&new_set, SIGTERM);rn sigaddset(&new_set, SIGSEGV);rnrn pthread_sigmask(SIG_BLOCK, &new_set, NULL);rn rn while(1)rn usleep(1000);rn g_millisecond++;rn rnrn pthread_exit(0);rnrnrnrnint main(int argc, char *argv[])rnrn int ret;rn pthread_t tid_timer;rn pthread_attr_t tattr;rn rn pthread_attr_init(&tattr);rn pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);rnrn ret = pthread_create(&tid_timer, &tattr, timer, NULL);rn if(ret < 0)rn perror("pthread_create()");rn return -1;rn rnrn while(1)rn sleep(1);rn printf("%lld\n", g_millisecond);rn rnrn return 0;rnrn[/code]rn
还是usleep问题
无论是usleep还是nanosleep, 都不能获得毫秒级精度的延迟最低也是20多ms。rn即使用select,我试验了一下,也仅能精确到10ms左右:rnrnvoid myusleep(unsigned us) rn struct timeval tv;rn tv.tv_sec = 0;rn tv.tv_usec = us;rn select(0,0,0,0,&tv);rnrnrn如何才能真正实现毫秒级的定时呢?
@@@@@@@@@@@汉字之间加空格@@@@@@@@@@@@
怎么用程序在任意汉字之间加空格呢rn比如发生的"防水堵漏"就就为"防 水 堵 漏 就 就"rn达人进
多线程之间通讯5.rar
多线程之间通讯5.rar
多线程之间通讯测试
多线程之间通讯测试源码
多线程之间怎样通讯
多线程之间怎样通讯 是不是用PostThreadMessage 这个东西怎么用 请给个简单的示例 多谢。
Demo16_多线程之间的通信
package test07; /* *需求: *资源有姓名性别两个线程 *一个负责给姓名性别赋值 *一个负责获取姓名性别的值 * *要求1 :解决程序“妖”的问题 *加入同步必须保证同一个锁 解决“妖”的问题 * *要求2 : 实现正确数据的间隔输出 *使用等待唤醒机制 wait() notify() notifyAll() *对于等待唤醒机制都...
多线程之间的通信方式
1.同步 2.wait/notify 3.管道通信
Demo15_多线程之间的通信
package test06; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Demo15_多线程之间的通信 { public...
多线程之间的通信
再次学习,学会了多线程间通信的分析思路。希望对你有用。 public class ThreadTi { //要求:子线程循环10次,父线程循环50次,子线程循环10次,父线程循环50次,如此循环100次 // 要注意:分析的思路,哪些循环是不可以打断的,就使用synchronized public static void main(String[] args) {
java多线程之间通讯
1 实现一个线程+1 一个线程 -1 class Share511 { public int a = 0; } class Thread552 implements Runnable{ Share511 share; @Override public void run() { while(true){ synchronized (share) { int a = shar...
多线程之间控制的问题!
我用一个线程作了定时器,里面不断计时对时间进行推进,当界面有按键时响应,响应动作主要是挂起和唤醒。现在我要在原有的基础上实现历史记录重演功能,就是要模拟历史记录中几个按键在某个时刻按下的动作,这就需要控制这个线程在几个特定时刻的被挂起和唤醒,怎么实现这个功能呢?是不是应该再设一个高优先级的线程,当到达历史记录按键按下的时刻时,发消息控制这个线程?很迷惑,请大家指点。谢谢各位!
多线程之间的通讯
多线程之间如何实现通讯 1.什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 画图演示 2.多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。 代码实现基本实现 共享资源源实体类 class Res { public String userSex; public String us...
并发编程-多线程之间通讯
多线程之间实现通讯 多线程之间如何实现通讯 什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 画图演示 多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。 代码实现基本实现 共享资源源实体类 class Res { public String userSex; ...
多线程之间通讯
tip:多线程之间如何通讯、wait、notify、notifyAll()方法、lock、停止线程
多线程之间的同步控制
问题: 同时运行的几个线程需要共享一个数据,并且要考虑到彼此的状态和动作。 例如,当一个线程对共享的数据进行操作时,在没有完成相关操作之前,不允许其他线程打断它,否则会破坏数据的完整性。也就是说,被多个线程共享的数据在同一时刻只允许一个线程处于操作之中。 实现原理: 为了保证线程安全,使用“锁旗标”; 当线程A获得了一个对象的锁旗...
java 多线程之间的通信
在多线程的编码实现中,往往每个线程之间是相互协作实现的,或者说是有先后顺序的,多线程之间的通信能够避免对同一共享变量的争夺。 一、wait()和 notify()1. wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。  当前的线程必须拥有当前对象的monitor,也即lock,就是锁。      线程调用wait()方法,释放它对锁的拥有
多线程之间实现同步
一、什么是线程安全? 1.1 为什么有线程安全问题? 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。做读操作是不会发生数据冲突问题。   案例:需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。 代码: /** * * @classDesc: 功能描述:(多线程之买火车票案例-展示线程不安全)
学习笔记-多线程之间通讯
1、什么是多线程之间通讯 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 2、wait、notify方法 1.因为涉及到对象锁,他们必须都放在synchronized中来使用.Wait、Notify一定要在synchronized里面进行使用。 2.Wait必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会...
多线程之间的线程通信
利用一个小型游戏的服务器和客服端之间的信息通信来介绍多线程之间的信息通信,以及通信可能存在的危险。
多线程之间的同步问题
在多线程中经常使用到sleep()、wait()、notify()、notifyAll()方法,有几点需要注意: 1、sleep()是属于Thread类中的,而wait()、notify()、notifyAll()则是属于Object类中的; 2、sleep()调用后程序会暂停执行指定的时间,让出cpu资源给其他线程,但是他的监控状态依然保持着,不会释放锁,当指定的时间到了又会自动恢复运行状态。
多线程之间通讯JDK1.5-Lock
synchronized:代码开始上锁,代码结束时释放锁;内置锁、自动化的、效率低、扩展性不高(不够灵活); JDK1.5并发包Lock锁 --保证线程安全问题,属于手动挡,手动开始上锁,手动释放锁,灵活性高; Lock 接口与 synchronized 关键字的区别 Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。 Lock...
java多线程之间的通信
一、使用wait()和notify()方法结合实现通信 注意:wait()和notify()必须在synchronized中使用 wait():是当前线程休眠并且释放锁。 notify():唤醒另一个线程 实例:input线程向共享数据中写入一条数据,out线程重共享数据中读一条数据。 /**  * 共享资源对象  * @author Administrator  *  */ class...
多线程之间实现
面试题 1.什么是多线程安全? 当多个线程同时共享数据时候,同一个全局变量或者静态变量,在做写操作的时候,会出现数据冲突问题,也就是线程安全问题。做读的时候是不会发生数据冲突的。 2.如何解决多线程之间的线程安全问题? 使用sync同步或者使用lock锁 3.为什么使用线程sync同步或者使用锁可以解决线程安全问题? 发生冲突数据问题(线程不安全)  只能让当前一个线程执行,执行完成后
多线程之间实现通讯
多线程之间实现通讯 多线程之间如何实现通讯 什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。 多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。 ### wait()、notify、notifyAll()方法 wait()、notify()、notif...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法