看板 Programming 關於我們 聯絡資訊
pid_max 大部分就是32767 或者到65535? 算是很小的數字吧... #include <pthread.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> void * msrand(void * data); struct p{ int * data; int id; }; int main(){ pthread_t pt[5]; struct p pp[5]; int d[5]={7919,22307,48611,104729,287117}; for(int i=0;i<5;i++){ pp[i].data=&d[0]; pp[i].id=i; pthread_create(&pt[i],NULL,msrand,&pp[i]); } for(int i=0;i<5;i++){ pthread_join(pt[i],NULL); } printf("%d %d %d %d %d\n",d[0],d[1],d[2],d[3],d[4]); } void * msrand(void * data){ struct p * pp = (struct p *) data; int * ptr=pp->data; int self=pp->id; for(int i=0;i<100;i++){ srand(ptr[(self+1)%5]); ptr[self]^=rand(); ptr[self]<<13; usleep(10); sched_yield(); } } 跟time沒有關係 你這樣跑一次之後,就可以得到五個int的...數... 亂不亂我不能證明... 這邊我還是用到了srand跟rand 因為...如果想自己寫數學式子弄亂數的話...生到最後都會變成一個constant... 沒有pthread的話要怎麼辦...我就不知道了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.102.254
jlovet:另外是可以讀取外部裝置傳來的資料...140.123.102.254 03/12 23:43
noguest:除了時間, 原文還有不能用亂數函式來做種 64.9.238.248 03/13 09:20
noguest:子喔. 還有pid(和thread id)很夠用了, 即 64.9.238.248 03/13 09:21
noguest:便是用預設的32768, 兩次要相同的機率已經 64.9.238.248 03/13 09:22
noguest:小於0.005%. 若這樣還不滿意, 很簡單, 把 64.9.238.248 03/13 09:22
noguest: max pid 改大就好, 例如, 在linux 下是 64.9.238.248 03/13 09:23
noguest:/proc/sys/kernel/pid_max, 在 unix 下是 64.9.238.248 03/13 09:24
noguest:/etc/system, 在 32-bit 下, 最大可改成 64.9.238.248 03/13 09:24
noguest:2^22, 也就是 4194304 64.9.238.248 03/13 09:25
noguest:另外, 可以用數學式子來做亂數產生器, 只 64.9.238.248 03/13 09:33
noguest:要seed不同,產生出的亂數不會變成constant 64.9.238.248 03/13 09:34