由买买提看人间百态

topics

全部话题 - 话题: 多线程
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
w***g
发帖数: 5958
1
来自主题: Programming版 - 我是一个线程 (转载)
一般fiber库会强调fiber overhead很小,可以跑几乎
无穷多个fiber线程。“无穷多个线程”其实是个伪需求。
比如处理http请求,无穷多个请求只有在一个请求新起
一个线程的情况下才会出现。正经点的需求肯定用的是
线程池,一台机器最多处理多少并行请求,开多少线程,
设计的时候都应该是定了的,超出设计请求量比如60%,
基本上就得开始起新机器做load balancing了。
我觉得在下面这种情况下可能fiber会有用。就是公司
人多,本来一个处理流程拆成100步,之间通过
MQ连接,然后有100个线程池并行处理。通过这种
办法,试图把软件的整合转换为服务的整合。
效果怎么样,我觉得也只有用的人自己知道。
如果公司小就几个人啥事情都要自己干的,我觉得
这种做法显然是自找麻烦。
h**********c
发帖数: 4120
2
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
当初记得是理解为volatile 是不会保留 thread local value,讲操作系统锁说过是两
boolean,说明设计者对可靠性的理解。
其实以前记得讨论过,用一个循环主要是处理missing signal,这个很讨厌,就是很贵
的solaris可能也不能保证notify.所以多线程,和多进程一样,也不一样,因为进程有
返回值,返回了就结束了,也可以wait, wait抓住信号,就可定结束了。但这两条对多
线程不适用。
这都是在实际中写出来的。但多线程的目的是什么呢,主要的目的比如,一个线程处理
一个socket,这样单个线程可以保证收发不影响别的socket。
这些东西也很依赖硬件实现。好在现在基本也都是X86-64.
总之,这个地方,你要问while loop 是对的,是为了处理missing signal, volatile
不volatile应该理解告诉每个thread 不要保留local copy,而是直接取共享值的地址,
也是告诉读程序的人,这个值是要共享的。
最后要理解的是,你永远无法判定一个线程或进程是否在运行,你只能知道它已经结束
了。所以volatile... 阅读全帖
b***i
发帖数: 3043
3
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
我觉得研究问题不能太教条,到现在还没人给出为什么不对的原因,只是引用标准和
wiki,那只是一般来说的情况。
首先,我觉得atomic不是个事。在UI里面写这个变量,或者在TCP等待的线程里面写这
个变量,又不是读完再加一再写,到底能有什么atomic问题,请指出。就一个bool,到
底能有什么问题?
第二,读写顺序又有什么关系?就一个通知各线程退出的变量,也没有其他操作,可以
吗?UI/TCP的回叫函数里面改写这个变量为真然后函数退出。那么,根本没有happens-
before关系。没有任何其他变量的改写。
void uicallback(){
quit=true;//此前此后没有任何其他赋值
}
或者
void processTCPcallback(...){
if ...
if (condition)
quit=true;//此if前此后没有任何其他赋值
if ...
}
另外,前面有人说过什么busy waiting,也是没啥关系。这个线程里面不是一直在读这
个变量,读一次之后要做很多事情,比如10毫秒的工作。就是说这个whi... 阅读全帖
b***i
发帖数: 3043
4
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
我后来又查了,cache根本就是更无关的,所有volatile退出线程是没有问题的。
就是说,既没有memory barrier问题,也没有原子操作问题。
没有memory barrier是因为设置quit的时候之前之后没有任何操作。如果你有操作需要
做可以在等待线程结束后的主线程那个join那里做。
原子的问题,是因为本来是bool,根本没有问题。
cache是因为本来硬件就是透明的,程序员不需要知道cache存在。
其他方面多线程一般不能使用volatile解决信息传递的问题。但是让线程终止可以,因
为线程都要中止了,还有啥可做的呢?放在Join那里就可以了。
g****t
发帖数: 31659
5
来自主题: Programming版 - 用volatile退出线程对不对?(C++)
我说过了。不了解uncertainty sources的情况,用atomic.
可以假设i = 1的赋值需要500秒,想一想你需要不需要
0到1信号的上升沿完整。
这主要不是个逻辑问题。是个软件的设计问题。就是你要留多少Robustness margin,代
价多高。
你要自己玩。那怎么样都可以。如果要卖出去给人用,massive Users, 那是另一回事。
我看咱们大家可以搁置讨论,5年后再看。


: 我后来又查了,cache根本就是更无关的,所有volatile退出线程是没有问题的。

: 就是说,既没有memory barrier问题,也没有原子操作问题。

: 没有memory barrier是因为设置quit的时候之前之后没有任何操作。如果你有操
作需要

: 做可以在等待线程结束后的主线程那个join那里做。

: 原子的问题,是因为本来是bool,根本没有问题。

: cache是因为本来硬件就是透明的,程序员不需要知道cache存在。

: 其他方面多线程一般不能使用volatile解决信息传递的问题。但是让线程终止可
以,... 阅读全帖
o****d
发帖数: 2835
6
单核多线程 还是 多核的?
如果是单核的 并且step1和step2是atomic的 那么应该是安全的
而如果是多核的 两个线程在不同的核上执行
一个线程修改lock=true 不一定会马上被另一个线程看到
另一个线程读到的lock可能还是false的值
这是所谓的 memory consistency 问题
那个程序中没有说如果lock是false就不能进入critical section
这里我假定step1获得锁的过程中需要check这个东西
不然谁都可以进入 lock完全不起作用 题目就失去了意义
s********e
发帖数: 340
7
我也说了join了, 但是面试官说,这个也不现实,因为线程池的线程很多比如100个,
1000个。
有没有什么可以做flag判断的? 我说了一个也许可以使用callable接口,返回线程任
务的执行结果,根据这个判断来决定主线程是否应该执行。但是我自己后来回来的路上
想想,感觉好像也不对。
U**Z
发帖数: 80
8
来自主题: JobHunting版 - 这个是线程安全的吗?
ThreadFoo()
{
std::vector va;
}
ThreadBar()
{
std::vector vb;
}
我认为va和vb不是同一个容器,占用不同的内存单元,因此没有线程安全的问题。但面
试官说两个线程都调用(触发)了vector模板类的构造函数,因此不是线程安全的,已
跪。
事后思考了一下,只有当vector的构造函数里有临界区(比如静态的类共享变量之类),
才有线程安全的问题?
Effective STL有提到:
对不同容器的多个写入者是安全的。多线程可以同时写不同的容器。
z****e
发帖数: 54598
9
如何线程安全
jcu,concurrenthashmap是答案之一,可以加分
如何scale
同步转异步,io bound节省线程
actor model随便找一个
java当然用vert.x啊
akka也行,但是akka比较难用
lock free的节奏
lock用多了,性能就下来了,lock越少越好
actor model可以实现lock free
但是前提是要完成同步转异步,线程数不能开太多
一般是available cores,比如jvm自身的fork&join pool
vert.x的eventloop pool,这个是available cores*2
因为netty里面需要分一半cpu资源给io,这一句猜的,不确定
因为线程数少了,所以lock数自然也少了,线程多,lock就多
最后写起来很ugly,怎么办?
future/promise, reativex(rxjava)和coroutine,三选一
还记得那个snapshot还是什么用的是erlang么?
最早actor model就是那边出来的
B*********h
发帖数: 800
10
来自主题: Java版 - 线程问题。
两个Thread,一个Runnable.
线程1:i == 0 after if{...}, i == 4 in for {...}before yielding.
线程2:i == 5 after if{...}, i == 10 in for{...}before yielding.
线程1:i == 10 after if{...}, i == 15 after for{...} completes. print 15.
线程2:i == 16 after if{...}, i == 21 after for{...} completes. print 21.
但是你并不能确定每次都能以这样的次序运行,这只是可能的运行次序的一种。就算你
不主动yield,还是有可能yield给其他的线程,只是这样简单的代码,这种可能性较小。
z*******3
发帖数: 13709
11

理论上是的,所以一般java教材都包含有多线程这一章
?
理论上作为程序员应该思考哪些资源在并发环境下需要保护
这也是多线程比较challenging的地方
所以写core java的要求比写j2ee要高,j2ee大多数时候不用考虑多线程的问题
当然这也只是理论上,实际上写j2ee还是要懂一点
另外,1.5之后,有了concurrency包,所以如果有并发的问题
就用这个包里面的类,如果没有并发的问题,就用util等类
vector,hashtable什么已经可以说是过时了,但是旧的代码里面还有很多
一般情况下,每一个线程都保有local变量,这样就不会冲突,参考threadlocal
这个应该在hibernate里面见得比较多
真正需要考虑冲突的是map这些,这种一般有两种情况
一种是读进去之后就几乎不改了,比如读取配置文件,那这种尽可能多使用hashmap这些
只有当真的是读写同时比较多出现的时候,那才会用到hashtable这些“线程安全”的
工具类
当然,前面也说了,现在用concurrency包里面的类来替换hashtable这些工具类
map在concurrency包里面... 阅读全帖
f*********e
发帖数: 8453
12
这个问题自己也觉得不可思议,因为如果断电程序会
从内存消失。可是不知道那种不稳定的供电情况,比如
说导致灯乎明乎暗的那种会对线程有什么影响。
我这两天在调试一个java多线程,因为原来运行得都
正常,但是最近突然出现类似deadlock的症状,我
查了代码好象没什么问题。唯一就是最近供电不稳定。
所以想来问问会不会因为供电不稳导致某个线程死了,
其他线程还在等这个线程的通知,所以就deadlock/freeze了。
d*e
发帖数: 109
13
来自主题: Programming版 - 【求助】Fortran多线程执行效率问题
【 以下文字转载自 CS 讨论区 】
发信人: die (Die), 信区: CS
标 题: 【求助】Fortran多线程执行效率问题
发信站: BBS 未名空间站 (Tue Aug 11 08:55:06 2009, 美东)
请教为何多线程执行起来花费时间比单线程要多呢?
非常感谢~
问题如下:
函数是用MONT CARLO方法计算圆周率。单线程计算函数两次共耗费大约是97;而两个线
程分别计算函数一次耗费的时间是392.
环境:
CPU: i7920 4核
操作系统:Windows Vista
编译器:Fortran 90
程序如下:
多线程主程序:
Program TESTPROC0
use ifqwin
use dfmt
use threadfunction
implicit none
integer,parameter::n_thread=2,n_c=2
integer(INT_PTR_KIND())::Threads_Handle(n_thread),waitresult,cend,retlog,
retint,&
thread_
e******r
发帖数: 623
14
在UNIX环境下C语言编程。我在main()里面创建了几个线程,程序如下:
int main(int argc, char **argv) {
int i;
for(i = 0; i < N; i++) {
pthread_create(NULL, NULL, reader_thread, NULL);
}
for(i = 0; i < M; i++) {
pthread_create(NULL, NULL, writer_thread, NULL);
}
return 0;
}
我如果在创建完线程以后直接就“return 0”了,是不是所有线程也就被迫同时中止了
?如果我想在main()里面等待所有线程都执行完以后再“return 0”,应该加一个什么
function?我知道可以用sleep()来等待,但是好像有更好的函数。查了半天没有找到
,哪位朋友帮忙指点一下?有肉包相送,谢谢了。
z****e
发帖数: 2024
15
来自主题: Programming版 - 多线程有什么优化的方法?
分别用-O0,-O1,-O2,-O3,都没有太大效果。
最多有个10%的变化。还是单线程那个快不少。
另外,那个分号加上去了,不影响结果。
-O3下的结果:
3.22 seconds,双线程
2.41 seconds,单线程。
我是明明看见双线程时候,两个cpu100%,然后一个还维持在100%,另一个掉下来。对,我就同步了一次,在双线程的时候。
a9
发帖数: 21638
16
来自主题: Programming版 - VC++线程问题
子线程啊。
相当于起了一个线程,在里面等待,然后主线程等待这个子线程完成。
那还要这个子线程干嘛啊,呵呵。
xt
发帖数: 17532
17
来自主题: Programming版 - VC++线程问题
必须用线程,因为主线程还要干活呢。sleep的问题在于不能及时唤醒,因为
有的线程可能要一星期才run一次,我不太愿意让它每秒钟醒过来哭两声再
回去睡觉。想找一个比较干净的方法。
目前我想到的是用mutex,在主线程开thread之前先锁住,然后再子线程
等待,把timeout设定成运行周期,等要停thread的时候设一个flag,然后
用mutex唤醒。
c*****4
发帖数: 1777
18
来自主题: Programming版 - 单线程多线程说到底
简历上有无多线程,是六位数年薪和五位数年薪的区别。因为会做多线程的人大脑结构
和只会做单线程的不一样。做PERM打广告申请绿卡,只要列明会多线程,一份合格简历
都收不到。
T*****e
发帖数: 361
19
我用过Java的多线程,跟Spring/Hibernate一起用。当时从Java5开始做的,没有用到
很高级的功能,直接裸奔Thread。
我们有大概十台服务器,每台上有数量不等的CPU/Core。总的来说对于每个服务器上各
个JVM Instance上跑的数据处理线程数目的上限就是CPU/Core的数量,另外每个工作线
程配备一个监测线程,以保证死掉的工作线程能够及时被终止或者其他异常的报告。之
外有一两个线程负责工作调度、系统监测以及异常报告等。
刚开始设计实现时没啥经验,后来试图了解更新的concurrent包,但没想好怎么利用。
z****e
发帖数: 54598
20
来自主题: Programming版 - mobile上才应该用单线程
因为mobile都是一个人在用
而server一般都是多人共用
所以从本质上说,客户端的app就是单线程便可,负责好欺骗用户的眼睛
剩余的core/cpu这些留给background apps
但是server从本质上说因为是多人共用,所以本质上就应该是多线程的
而非单线程,这样设计的结构以及代码实现直观,便于理解
所以swift,vert.x设计都很合理,约束少,private member都可以自由访问
android感觉怪怪的,双线程还是会经常冲突
不得不在controller和model之间用上一堆的原子操作
虽然我不用set/get以及lock这些,但是为此小心翼翼,其实不划算
android搞成单线程就好了,像swift那样就很好用
用swift除了语法有些蛋疼以外,其他写起来真是一种享受
xcode太爽了,android studio次之
m**********s
发帖数: 518
21
下限是硬件core的数量N
上限取决于load pattern和memory constrain
理想系统可以完全event driven,上限等于N 1
实际系统通常大于N 1,需要进一步考虑系统负载pattern,线程的固定内存开销和线程
切换的动态开销,以及系统负载裕量

理论上,比如8核CPU可以同时运行8个thread,但是一般运行多少线程比较合适呢?我
觉得应该大于8个,因为可能有线程空闲,但是太多的线程会有很大的switching over.
.......
c****3
发帖数: 10787
22
你这个问题的答案,还是和操纵系统有关。
线程(进程)最大的开销,就是线程(进程)切换,也就是一个线程,如果拿不到锁,
就会block,然后被操作系统切换走,这个上下文切换开销,如果线程多,就很高。有
的操纵系统是按照进程调度,有的是按照线程调度。
所以你的资源如果要锁,尽可能让程序能快速访问,减少block的几率。所以在锁里放
文件操纵或者类似运行速度慢的东西,是不明智的。除非没啥对性能的要求
b***i
发帖数: 3043
23
我写了一个线程播放midi,函数输入是一个字符串,里面告诉我要弹什么键。所以我一
边播放,一遍调用Thread.sleep(200)来等待。每次sleep会后,我要看一个变量是否被
UI线程设置了,如果设置了,就退出这个线程。否则,我继续等待,直到这个音符结束
,然后我播放下一个音符。
另一个办法是不是interrupt?这个是怎么用的?UI直接调用mythread.interrupt?
以上是有sleep的线程,所以我怎么着都可以退出。如果是大量计算的线程,是不是就
只能不停查询变量才能退出啦?
c*****m
发帖数: 1160
24
来自主题: Programming版 - Java 多线程:还需要好CPU?
故事很简单:一段程序本来跑10分钟;修改成多线程后(用runnable接口),在我的
lenovo yoga 710 上跑,只用一半时间。可以多次重复,排除缓存之类的可能。
同一段程序,在同事的 lenovo yoga 910 上跑,却完全没有加快的效果,总是10分钟。
按理说 910比710贵两三百块钱呢。
我们在线程里加入log,能看到多个线程之间都有穿插出现,而不是一个线程堵塞的状
态 。在两台电脑上都是如此。
最后查到,910上的CPU是 i7-7500U
# of Cores 2
# of Threads 4
710: i7-7700HQ
# of Cores 4
# of Threads 8
这是我们能找到的最可疑的区别了。
问题:难道在 2-core的CPU跑就没有多线程的好处?
附注:上面都是在 Eclipse 执行的java程序,用 java 8 最新版。eclipse里应该都是
默认的配置,程序也完全相同。
i**o
发帖数: 1161
25
如果机器内存cpu资源有限,建议用这个版本,一个窗口就可以并发
任意多线程连接。
如果机器够强,建议和另外一个版本一起上,双保险。
1。 下载antijapan_v3.exe
http://s13.yousendit.com/d.aspx?id=3ISNC1R51T3G12GQR3QYRV6HDP
2. 直接双击运行,默认100线程,
3。也可在dos下运行,可自行设定线程数,运行方式:
antijapan_v3 200
*200为线程数。
这个版本是针对现在这次投票的。
z***e
发帖数: 5393
26
奇怪,不晓得你们都从哪里看到说windows没对多核做优化,凭空YY?有空多看看
windows internal之类的书去。以为还是win98年代啊?
回到lz的问题,如果你的任务分配得当,multi-threading在quad core上面肯定会快些
,你可以从这几个方面测试:
1. 把你那复杂的矩阵运算换成简单容易测试的,比如算10k个数相乘之类的,然后看多
线程和单线程的比较,这个主要是先让你把程序框架弄对,然后再把你自己的什么算法
换进去。
2. 把线程中的输出都关掉,还有StringCchprintf那个---不要在多现程的thread当中
搞.
3. 还不确信,用setaffinity把线程跟单个CPU绑定,如果quad core的每个CPU算1000
个数还不如一个cpu算4000个数来得快,你可以给intel或者ms file bug了。
x****u
发帖数: 44466
27
有几个核就开N的倍数的线程,你的科学计算保持线程数等于核的数量就行。
不过在假多核上,可能出现多线程慢于单线程的问题,这个不是你的错。
h**********c
发帖数: 4120
28
这个六角幻方给人的第一直觉-- 象有限元的网格,
而且的确有限,19!很大,但毕竟有限,但是最后下决心做试一下,还是serawang的几个贴
子(在数学版)比较有启迪的意义.
这个题可以列十五个线性方程,19个未知数,按线性代数的知识,有无穷多解,但是是有代
数表达的.考虑未知数不同,且为1~19.当时没有google,还不知道能不能找到答案,只想
试一下线性代数的知识.
后来用matlab分析发现,十五个线性方程,有十二个是非线性相关,遗憾的是,按matlab例
题,无法给出正确的代数表达式,而且计算的reduced echlon matrix也是错误的.最后花
了两个小时,手工算出来十二个线性方程,那么,知道七个未知数,其他十二个未知数可
得.
matlab是一种科普工具,最后写code还得c/c++.先写了单线程,1700秒居然得出答案!后来照
msdn的多线程又写了一个多线程版本,没有提高,反而更慢.大概是liuhulan转了ken kerr 关于locality的文章,茅
涩顿开.
中间又去干了别的事情,没来得及对windows多线程更多优化,跑到300秒.
在我自己机器上,
d*e
发帖数: 109
29
请教为何多线程执行起来花费时间比单线程要多呢?
非常感谢~
问题如下:
函数是用MONT CARLO方法计算圆周率。单线程计算函数两次共耗费大约是97;而两个线
程分别计算函数一次耗费的时间是392.
环境:
CPU: i7920 4核
操作系统:Windows Vista
编译器:Fortran 90
程序如下:
多线程主程序:
Program TESTPROC0
use ifqwin
use dfmt
use threadfunction
implicit none
integer,parameter::n_thread=2,n_c=2
integer(INT_PTR_KIND())::Threads_Handle(n_thread),waitresult,cend,retlog,
retint,&
thread_handle_1,thread_handle_2
integer(INT_PTR_KIND()), PARAMETER :: security = 0
integer(INT_PTR_KIND()), PARAMETE
g*****g
发帖数: 34805
30
来自主题: Java版 - 问个多线程问题
我试图多线程处理一个Queue上的数据,数据是一个email address和一些相关
数据。email address作为用户名,在DB里必须是unique的。我多线程处理
这些用户的时候,产生的问题是多个线程都试图建立同一个用户,这时候
后commit的线程就会出错。怎么才可以避免这个问题而又尽量保持性能呢?
我用的是hibernate和spring.
y****n
发帖数: 192
31
一个线程在读文件的时候会不会把文件锁住?
另外,是不是即使用多线程同时读文件也不会加快速度呢?我的理解是I/O通道只有一个,单线程和多线程能达到的速度已经被瓶颈了。
谢谢!
b***i
发帖数: 3043
32
来自主题: Java版 - Java线程一问
我有个线程,作大约10秒钟的事情。
我的GUI有个按钮,按下就开始这个线程。但是我不想让多于一个线程同时运行,应该
用什么措施呢?把按钮disable?线程结束的时候在enable?
r******r
发帖数: 700
33
我想得也不是特别清楚,但是 race condition 解释的大意就是说,多线程容易造成某
个数据量的值还未来得及更新,就被另一个线程访问到了。比如说,remove() 把 v's
size (elementCount) 在时间点 T 从 4 降到了 3,但是 concurrent 的线程 size(
) 可能还只会返回过去的值 4.如果是两个线程是 sequential 就不存在这个问题,但
是 concurrent 就会有这个问题。
z*******3
发帖数: 13709
34
来自主题: Java版 - 多线程真头疼,但也挺有趣
楼主用这么长时间是因为自己写计算,输入和输出都比较缓慢造成的
统计上的一些计算算起来是挺恶心的
有几个方式可以考虑
1)用apache common math,里面statistics的lib比较好用
比自己写强多了,除非太过于冷门的分布,稍微流行一点的,这个lib里面都有
2)用r对java的接口挂上r处理
3)先用sas写好,然后转换成免费的java代码,不过这个方式要钱
对于现有的文件,最好用上db,400m对于db来说小意思
如果灰常大,上hadoop,未必需要用上多线程
倒是最有可能上多server
现在java开发,自己倒腾线程的实在是不多了
要么concurrent,要么akka,要么直接借用tomcat等server
要么用db,要么hadoop,多线程这个大问题早已经被各种软件和框架包装起来
真正去写多线程的估计都是legacy code
不过楼主这个也就是legacy code,有时候没有办法
c*m
发帖数: 836
35
来自主题: Java版 - 多线程真头疼,但也挺有趣
我以为他是in general的说多线程。绝大多数DataSource是thread safe的,所以对DS
的操作完全不需要synchronized。不过,即使是最极端的情况,每次只允许一个thread
access DataSource,也还是会快。因为他的程序是个IO和CPU交互或者同时进行的过
程,在这种情况下,单线程只能做一会CPU,做一会IO。如果用多线程,即使IO和计算
本身全是单线程,至少IO和CPU可以同时进行了。更不要说IO和CPU本身也都可以用多线
程优化了。
g***l
发帖数: 2753
36
【 以下文字转载自 Programming 讨论区 】
发信人: gmail (Gmail is Nothing --Lanxiang/SJTU), 信区: Programming
标 题: 请教一个linux下面的多线程semaphore的问题。
发信站: BBS 未名空间站 (Thu Oct 7 13:40:37 2010, 美东)
就是普通的两个linux thread,一个semaphore.
thread 1:
semaphore_wait(sem);
xxxxxx。。。。。
semaphore_signal(sem);
thread 2:
while(true)
{
semaphore_wait(sem);
xxxx......
semaphore_signal(sem);
}
现在的问题是thread 1被这个sema给block住了,根本没有机会去抢到这个sema,而
thread 2在不停的hold和release这个sema。
如果在thread2 process_sleep()一下,thread1就可以了。
两个线程的优先级是一样的。调度方式也是RR。
我的问... 阅读全帖
b***y
发帖数: 2799
37
来自主题: Programming版 - [合集] 问个多线程的问题
☆─────────────────────────────────────☆
kukutf (五脚蟹★酷酷豆腐) 于 (Wed Nov 19 11:58:01 2008) 提到:
如果有一个变量x,只有一个线程改变x,其他的线程都是在读取x
比如,原来的x值为a,线程修改后,变为b,假定这些修改都是简单的c赋值操作。x=b;
问题是,在修改之前,是不是需要对x进行加锁。
如果不加锁的话,有没有可能在其他线程读取的时候,会出现非a非b的值呢?
☆─────────────────────────────────────☆
plus (祝阳阳早日康复) 于 (Wed Nov 19 12:01:09 2008) 提到:
如果x是你自己定义的class,有可能非a非b

☆─────────────────────────────────────☆
kukutf (五脚蟹★酷酷豆腐) 于 (Wed Nov 19 12:03:26 2008) 提到:
x是一个int数,不是class或者struct
☆───────────────────────────────
j**7
发帖数: 771
38
来自主题: Programming版 - 请教一个c语言实现多线程的问题
求教一个用C语言实现对多线程的运行结果等待,windows和visualstudio2005环境下(
非Linux pthread,尽量不使用winAPI)。具体如下,使用了_beginthread开始了若干
个线程,但想在主线程中等待这些线程运行结束一遍进行后续操作。不知道是否有单一
函数或简洁操作能够实现。望各位不吝赐教啊~
j**7
发帖数: 771
39
来自主题: Programming版 - 请教一个c语言实现多线程的问题
嗯。
不过我这些个并行的线程要调用自己写的一个比较大的函数,而且要调用很多次,倒没
有标准库里的函数,这样的话是不是就一定不会泄露呢??
查到一个说法:
如果在除主线程之外的任何线程中进行一下操作,你就应该使用多线程版本的C
runtime library,并使用_beginthreadex和_endthreadex:
1 使用malloc()和free(),或是new和delete
2 使用stdio.h或io.h里面声明的任何函数
3 使用浮点变量或浮点运算函数
4 调用任何一个使用了静态缓冲区的runtime函数,比如:asctime(),strtok()或rand()
这么说来基本啥都不能用了。beginthread能用waitForSingleObject来等待么?
m********r
发帖数: 334
40
来自主题: Programming版 - 关于多线程编程的一个问题
一个大项目,代码太多了,简单解释一下,一个线程用了AES加密函数
aes_set_key(&aes_ctx_key,key, KEY_SIZE, 0); 其中key是硬件相关的密钥,
key[i] ^= mac_address[i];
另一个线程需要访问PCI设备,写数据到PCI地址时正常,读数据时发现aes_ctx_key被
改变了,这两个功能逻辑上完全不相关,虽然线程间共享资源,但是aes_ctx_key对另
一个线程是不可见,不太明白为什么。不过这里可能熟悉嵌入式的也不多,就当
brainstorming吧
x****u
发帖数: 44466
41
我搜了C标准,找不到什么对线程模型的描述。所以这种优化如果对多线程产生问题,
多半是违反C语法。
C++的abstract machine有没有规定必须是单线程的?
咱们讨论的是编译器的行为。我认为gcc很可能根本就不按照你的想法运行,所以most
likely根本就没有bug。
Wikipedia里面的条目也只是含糊的说,优化的前提是编译器发现no other code can
possibly change the value,这里面也没说前提是单线程。

abstr
abstract
re
and
+
j
z****e
发帖数: 2024
42
我靠,我一天不来,就乱成这样了???
还没来得及看全回帖。
1. mutex 就够了。mutex就是干lz说的这个情况用的。
2. C++根本就是单线程模式,其多线程依赖于具体的library。C++0x已经在标准里边加
了多线程,std::thread. gcc 4.4以上可用,windows下用just::thread,这个是C++的
未来。其他的库都不是标准支持的,而多线程从理论上说,是不能用库来实现的。有大
牛的一篇文章讲这个。
w*********s
发帖数: 277
43
来自主题: Programming版 - 用多线程怎么比单线程还慢呢?
用perl来读一堆文件
1.单线程顺序一个一个的读文件
2.用多线程读多个文件,每个线程读一个文件
光读,没做任何操作。
用time命令看运行时间
结果发现2比1慢好多,咋回事呢?
谢谢!
x**n
发帖数: 1055
44
两个线程都是基于有限差分法的(finite difference),也就是t_msvc和t_mingw都是按照各自的时间步行进(time marching),每步开始前,两个线程之间要停下来交换一下各自的数据,然后开始各自的计算,然后等到下一步开始前,两个线程又要停下来交换数据,以此类推,因此线程同步就很重要了
b***i
发帖数: 3043
45
再具体点。每个线程内都做了什么,详细说说。有循环吗?

按照各自的时间步行进(time marching),每步开始前,两个线程之间要停下来交换一
下各自的数据,然后开始各自的计算,然后等到下一步开始前,两个线程又要停下来交
换数据,以此类推,因此线程同步就很重要了
z****e
发帖数: 54598
46
来自主题: Programming版 - 单线程多线程说到底
我压根没谈线程和进程
我的意思是,不管是线程还是进程
你都不需要自己动手去做
多线程也好,多进程也罢
无非一个调度的问题
自己折腾说到底就是自己处理调度
跟level有个p关系
说的根本就不是区别,而是共同点
看一群人大谈差异,让我觉得好笑

kernel
z****e
发帖数: 54598
47
另外,只有node才需要ipc
其它框架都是itc
这就是为啥node很傻逼
像单线程一样编程是目的
但是你真把所有东西都做成单线程的话
那个thread挂了咋办捏?
哪怕是一个不小心,被阿三程序员写段代码blocked了
你不一样很苦逼?
当然这个问题哪怕是弄成itc一样存在
但是至少至少,其它启动的threads会在一定程度上抵消这个问题
我猜测这就是为啥在大多数报告里面,node总是会有丢包的问题
可能就是那个线程出了问题,把所有鸡蛋全部放在一个篮子里
自然会出问题,vert.x说,我按照cpu有多少个core来建threads
一个dual core的cpu,vert.x就启两个threads,如果是两个这种cpus
就起2*2=4个threads,这样万一其中一个thread被blocked,一样不会挂,对不对?
当然blocked在异步编程中是错误的,而且同一个process下处理communication
比起多个processes下处理,那是要强太多了,不同process之间做c,那很苦逼的好不好
得调用第三方工具,各种狗血问题,所以你还是用node的思维来看其他多线程... 阅读全帖
z****e
发帖数: 54598
48
需要第三方因为捆绑一个process只有一个thread
这个显然是错误的,具体例子可以看这个
http://blog.carbonfive.com/2014/02/28/taking-advantage-of-multi
只是一个idea,很明显,放弃多线程并不是一个明智的选择
显然应该想办法对付多线程,而不是直接上多进程
当然跟immutable一样,问能不能这样搞,可以
但是这样搞不够聪明,不够好,就这么简单
不像是一个solution,更像是一个回避,相比之下,其它框架都是通过threads来搞定
很优雅啊,也没有导致其他问题产生
一般只有多个虚拟机结点出现的时候才会用cluster
但是node在多个core时候就会启动这个模式,甚至load balancing, 这真是wtf啊
这个显然是错误的,本来应该是itc的问题变成了ipc
这个太奇芭了,其他框架都不需要这么做
当你有多个虚拟机nodes时候才需要用cluster
其他框架在cpu的更换的时候都不需要怎么弄,全自动的
唯独node要自己写代码予以配合
这是不是很奇芭?搞cluster等于是把框架应该解决的问题丢给了用... 阅读全帖
z****e
发帖数: 54598
49
另外,只有node才需要ipc
其它框架都是itc
这就是为啥node很傻逼
像单线程一样编程是目的
但是你真把所有东西都做成单线程的话
那个thread挂了咋办捏?
哪怕是一个不小心,被阿三程序员写段代码blocked了
你不一样很苦逼?
当然这个问题哪怕是弄成itc一样存在
但是至少至少,其它启动的threads会在一定程度上抵消这个问题
我猜测这就是为啥在大多数报告里面,node总是会有丢包的问题
可能就是那个线程出了问题,把所有鸡蛋全部放在一个篮子里
自然会出问题,vert.x说,我按照cpu有多少个core来建threads
一个dual core的cpu,vert.x就启两个threads,如果是两个这种cpus
就起2*2=4个threads,这样万一其中一个thread被blocked,一样不会挂,对不对?
当然blocked在异步编程中是错误的,而且同一个process下处理communication
比起多个processes下处理,那是要强太多了,不同process之间做c,那很苦逼的好不好
得调用第三方工具,各种狗血问题,所以你还是用node的思维来看其他多线程... 阅读全帖
z****e
发帖数: 54598
50
需要第三方因为捆绑一个process只有一个thread
这个显然是错误的,具体例子可以看这个
http://blog.carbonfive.com/2014/02/28/taking-advantage-of-multi
只是一个idea,很明显,放弃多线程并不是一个明智的选择
显然应该想办法对付多线程,而不是直接上多进程
当然跟immutable一样,问能不能这样搞,可以
但是这样搞不够聪明,不够好,就这么简单
不像是一个solution,更像是一个回避,相比之下,其它框架都是通过threads来搞定
很优雅啊,也没有导致其他问题产生
一般只有多个虚拟机结点出现的时候才会用cluster
但是node在多个core时候就会启动这个模式,甚至load balancing, 这真是wtf啊
这个显然是错误的,本来应该是itc的问题变成了ipc
这个太奇芭了,其他框架都不需要这么做
当你有多个虚拟机nodes时候才需要用cluster
其他框架在cpu的更换的时候都不需要怎么弄,全自动的
唯独node要自己写代码予以配合
这是不是很奇芭?搞cluster等于是把框架应该解决的问题丢给了用... 阅读全帖
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)