兩個執行緒按順序列印1~10
<pre name="code" class="cpp">#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> pthread_mutex_t lock; pthread_cond_t cond; int i = 1; void* salewinds1(void* args) { while(1) { pthread_mutex_lock(&lock); if(i == 10) { pthread_mutex_unlock(&lock);//退出前解鎖否則會造成別的執行緒死鎖 pthread_exit(0); } while(i % 2 == 0) { pthread_cond_wait(&cond, &lock); } printf("%d\n", i); i += 1; if(i > 10) { pthread_mutex_unlock(&lock); pthread_exit(0); } pthread_cond_broadcast(&cond); pthread_mutex_unlock(&lock); } return NULL; } void* salewinds2(void* args) { while(1) { pthread_mutex_lock(&lock); if(i > 10) { pthread_mutex_unlock(&lock); pthread_exit(0); } while(i % 2 == 1) { pthread_cond_wait(&cond, &lock); } printf("%d\n", i); i += 1; if(i == 10) { pthread_mutex_unlock(&lock); pthread_exit(0); } pthread_cond_broadcast(&cond); pthread_mutex_unlock(&lock); } return NULL; } int main(int argc,const char* argv[]) { pthread_t thd1; pthread_t thd2; int val1=1; int val2=2; pthread_mutex_init(&lock, NULL); pthread_cond_init(&cond, NULL); pthread_create(&thd1, NULL, salewinds1, NULL); pthread_create(&thd2, NULL, salewinds2, NULL); pthread_join(thd1, (void**)&val1); pthread_join(thd2, (void**)&val2); pthread_mutex_destroy(&lock); pthread_cond_destroy(&cond); return 0; }
相關推薦
兩個執行緒按順序列印1~10
<pre name="code" class="cpp">#include <stdio.h> #include <stdlib.h> #include <p
a,b,c三個執行緒按順序列印數字1-96 執行緒a列印1,b列印2,c列印3
程式的主入口 公共的物件鎖 列印方法的核心執行緒 具體的實現程式碼 PrintThread public class PrintThread implements Runnable { private String name;//執行緒名稱
多執行緒同步之——兩個執行緒序列順序列印奇數和偶數的兩種實現
題目:一道經典的執行緒併發的問題,執行緒a列印1、3、5……,執行緒b列印2、4、6……,兩個執行緒交替執行輸出1、2、3、4、5、6…… 要點: package com.test; import java.util.concurrent.locks.
用三個執行緒按順序迴圈列印abc 三個字母,比如abcabcabc
執行緒類 import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Ree
多執行緒程式設計(二)——面試題,每個執行緒只打印一種字元,多個執行緒協同順序列印n次字串(求大神的其他實現方案)
(這個是歡聚時刻(YY)的筆試題,在筆試的時候沒有寫出來,後來自己寫了出來,希望大神能給出更優秀的解決方案……ps:現在面試官總有面試時問筆試程式設計題思路的習慣,呵呵) 題目簡述: 輸入一個字串以
讓10個執行緒按順序打印出0123456789
思路 1、通過公正瑣object對10個執行緒進行管理,喚醒所有執行緒或者阻塞等待。 2、通過orderNum通知下一個執行緒需要輸出的數字 程式碼 public class Printer { private static final
一道面試題:通過wait和notify的兩個執行緒互動輸出thread1-1...thread1-5,thread2-6...thread2-10...
這是一道關於多執行緒的面試題,好久沒有做過這種多執行緒的題了,手有點生,那麼就來敲一敲 package threadDemo; /* * 多執行緒的交叉列印 */ public class
多個執行緒按順序執行——join()
package com.jjyy.thread; /** * 假如有三個執行緒T1,T2,T3,如何保證T2在T3之前執行完成,T1在T2之前完成? * @author jiangyu 2015年9月7日 * 注意:執行緒的優先順序無法保障執行緒的執行次序。只不過優先
寫兩個執行緒,一個執行緒列印 1~52,另一個執行緒列印A~Z, 列印順序是12A34B...5152Z
這個題目就是要用wait()和notify()方法來控制兩個執行緒的執行 看如下程式碼: 當標誌位flag為1 時,列印數字;否則列印字母 count即為列印的數字 class Print { private int flag = 1;
寫兩個執行緒,一個執行緒列印 1~ 52,另一個執行緒列印A~Z, 列印順序是12A34B...5152Z;
寫兩個執行緒,一個執行緒列印 1~ 52,另一個執行緒列印A~Z, 列印順序是12A34B…5152Z; 第一種方式: class Print{ private int flag = 1; private int count = 1; public synch
一個關於執行緒的經典面試題,要求用三個執行緒,按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5, * 然後是執行緒2列印6,7,8,9,10, 然後是
package thread; /** * * 一個關於執行緒的經典面試題,要求用三個執行緒,按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5, * 然後是執行緒2列印6,7,8,9,10, 然後是執行緒3列印
如何讓兩個執行緒交替列印整數1-100?你的答案呢?
前端時間下班臨走前看到同事做嘗試的一個題目:如何讓兩個執行緒交替列印整數1-100? 好幾年沒有寫程式碼玩了,想了想,花了十多分鐘寫了個答案: #include<stdio.h> #include <pthread.h> #include <stdlib.h>
兩個執行緒交替列印輸出1-100
思路:宣告一個全域性變數int i = 1;然後將這個變數鎖定,執行緒輪流訪問這個變數,並列印即可。 package thread; /** * @Title: ThreadTest1 * @Description: TODO * @Author: lz * @Cre
JAVA基礎(2) -- 兩個執行緒輪流列印1-100
思路:宣告一個全域性變數int i = 1;然後將這個變數鎖定,執行緒輪流訪問這個變數,並列印即可。 程式碼如下: package cn.taneroom.test; public class Th
兩個執行緒,t1,t2,列印1-100中的數字 t1奇數,t2偶數
/** * 兩個執行緒,print-1 print-2 分別列印print-1 1 print-2 2 print-1 3 print-2 4 依次遞增至100 */ public class ThreadTest { static volatile int
java中按順序執行兩個執行緒的方法
比如有執行緒A和B,在A執行完成後B再開始執行 線上程A run方法最後啟動執行緒B - - 共享一個volatile boolean型別的標識變數,B一直檢查該變數的值,而A則在執行完成後改變A的
Java小題目之兩個執行緒順序列印A、B
1、問題描述 使用Java多執行緒方式來實現迴圈列印A、B,並保證不亂序。 2、解決方案 java在編寫多執行緒程式時,為了保證執行緒安全,需要對資料同步,經常用到兩種同步方式就是Synchronized和重入鎖ReentrantLock。 利用syn
多執行緒(至少三個執行緒)分別列印A、B、C,要求按ABC的順序迴圈列印10次。
看到網上一道題,三個執行緒按順序列印A、B、C迴圈10次,於是自己按幾種方法也寫了一下: 一、用執行緒池、Lock鎖和condition(Object 監視器方法的使用)組合使用實現: package multithread; import java.util.concu
寫兩個執行緒,一個執行緒列印1-52,另…
public class ThreadDemo { // 測試 public static void main(String[] args) throws Exception { Object obj = new Object(); // 啟動兩個執行緒 Thread1 t1 = new Thread1(o
多執行緒——設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。寫出程式。
package com.com.aaa.addreduceThread; public class ThreadDemo { private int j=1; //每次新增1