1. 程式人生 > >兩個執行緒按順序列印1~10

兩個執行緒按順序列印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;
}



相關推薦

執行順序列印110

<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