子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次,如此迴圈50次,試寫出**
pthread_cond_t pcond = pthread_cond_initializer;
pthread_mutex_t mutex = pthread_mutex_initializer;
bool ismainthreadturn = false;
#define operation() printf("1")
const int total_loop = 50;
const int sub_op_per_loop = 10;
const int main_op_per_loop = 100;
void* fun(void* arg)
for (int op = 0; op < sub_op_per_loop; ++op)
printf("\n");
ismainthreadturn = true;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&pcond);
}return (void*)0;
}
int main()
for (int op = 0; op < main_op_per_loop; ++op)
printf("\n");
ismainthreadturn = false;
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&pcond);
}return 0;
}
編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a、b、c,每個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示;如:abcabc….依次遞推。
#define gettid() syscall(__nr_gettid)
pthread_cond_t pcond = pthread_cond_initializer;
pthread_mutex_t pmutex = pthread_mutex_initializer;
const int total_loop = 10;
const unsigned int thread_num = 3;
unsigned int threadturntoprint = 0;
__thread unsigned int tid;
#define operation() printf("|%u|", tid)
void* fun(void* arg)
operation();
threadturntoprint = ( 1 + threadturntoprint) % 3;
pthread_mutex_unlock(&pmutex);
pthread_cond_broadcast(&pcond);
}return (void*)0;
}
int main()
/*in my way, i waste mainthread, as mainthread can also do part of job*/
for (int i = 0; i < thread_num; ++i)
return 0;
}
編寫乙個程式,程式會啟動4個執行緒,向4個檔案1.txt,2.txt,3.txt,4.txt裡寫入資料,每個執行緒只能寫乙個值。
執行緒a:只寫1
執行緒b:只寫2
執行緒c:只寫3
執行緒d:只寫4
4個檔案1.txt,2.txt,3.txt,4.txt
程式執行起來,4個檔案的寫入結果如下:
a:12341234...
b:23412341...
c:34123412...
d:41234123...
pthread_cond_t pcond = pthread_cond_initializer;
pthread_mutex_t pmutex = pthread_mutex_initializer;
const int total_loop = 10;
const int thread_num = 4;
int fds[thread_num];
int turns[thread_num] = ;
#define operation(num) printf("%d ", num)
__thread int count[thread_num] = ;
__thread char buf[1];
__thread int numtoprint;
void* fun(void* arg)
for (int idx = 0; idx < thread_num; ++idx)
}if ( ++turns[idx] > thread_num)
--count[idx];
++loop;}}
pthread_mutex_unlock(&pmutex);
pthread_cond_broadcast(&pcond);
}return (void*)0;
}
int main()
}pthread_t tid[thread_num];
for (int i = 0; i < thread_num; ++i)
for (int i = 0; i < thread_num; ++i)
return 0;
}
多執行緒程式設計題
一 當多個執行緒需要協同完成一件事時,可以加鎖 wait,notify一起完成。1.寫兩個執行緒,乙個執行緒列印1 52,另乙個執行緒列印a z,列印順序是12a34b.5152z 思路分析,乙個執行緒列印數字,每次列印兩個數字,26次列印完,另乙個執行緒列印字母,也是26次列印完 可以建立兩個方法...
多執行緒 「等待喚醒」程式設計題
要求 第乙個執行緒 遍歷1 1000所有的數字,在遍歷過程中,如果發現這個數字能同時被2,3,5,7整除,立即wait 等待,讓第二個執行緒進入。第二個執行緒 執行後,將乙個計數器 1,之後再喚醒等待的執行緒。主線程中 休息2秒,讓兩個執行緒全部執行完畢,列印 計數器 的結果。我的 public c...
多執行緒程式設計
1 多執行緒的基本思路不是在介面執行緒執行費時的 而是專門啟動乙個執行緒 稱作工作執行緒 來完成,介面執行緒只負責介面的 顯示 和操作,而工作執行緒只負責耗時的操作過程。2 對於普通的win32應用程式來說,執行緒可以分為兩種 介面 ui user inte ce 執行緒和工作執行緒。介面執行緒一般...