1樓:匿名使用者
同步就是使得兩個或者多個程序之間的行為按照一定的時序來執行。比如說執行緒a完成了某件事,然後執行緒b才能做某件事。具體一點,就是,執行緒間的某個動作執行前需要確認一個或者多個其他執行緒的當前狀態。
而非同步則是多個執行緒各跑各的,互不干涉。
linux下的多執行緒實現由pthread庫提供,標頭檔案為pthread.h。多執行緒最重要的就是要保護好共享資源(用互斥體,mutex),尤其是非同步。
**哥哥就不上了,這裡關鍵的不是**的問題,也不是linux、windows的問題,重要的是概念的理解。哥們不妨先研究研究「生產者-消費者」這個常出現在教科書上的模型,這是一個典型的同步問題。就講這麼多了,拜拜。
2樓:匿名使用者
同步和非同步的區別:
1、同步就是說多個任務之間是有先後關係的,一個任務需要等待另一個任務執行完畢才能繼續執行。
2、非同步就是說多個任務之間沒有先後關係,不需要相互等待各做各的事。
同步程式設計方法:
1、訊號量
2、互斥量
非同步無需考慮資源衝突,不需特別處理。
3樓:匿名使用者
你問這樣的問題,答案只有拷貝大段大段的文字
同步和非同步這些知識應該在作業系統的消費者和生產者/哲學家進餐裡找,要自己去看的,多說無益
如何能實現程式的同步和非同步程式設計,這個要看實現的需求,和編碼的能力了
4樓:匿名使用者
需要進一步的觀察才行,細心一點會好的!
5樓:為什麼你帥
...........
什麼是同步程式設計、非同步程式設計??
6樓:四舍**入
同步程式設計:傳統的同步程式設計是一種請求響應模型,呼叫一個方法,等待其響應返回。就是 一個執行緒獲得了一個任務,然後去執行這個任務, 當這個任務執行完畢後,才能執行接下來的另外一個任務。
非同步程式設計:非同步程式設計就是要重新考慮是否需要響應的問題,也就是縮小需要響應的地方。因為越快獲得響應,就是越同步化,順序化,事務化,效能差化,非同步程式設計通常是通過fire and forget方式實現。
7樓:包布丁
我們知道,在一般的程式語言中,如果沒有特殊處理,**都是以同步方式進行的。通俗講就是「一個接一個」,每個操作都在上一個操作完成之後完成。
如果你寫過窗體應用程式,可能會碰到這樣一個情況:直接在窗體事件函式中跑io操作、網路操作或耗cpu大的操作時,窗體會出現明顯的卡頓現象。原因在於窗體的訊息迴圈被耗時的操作停住了,不能響應使用者。
這就是同步程式設計的缺點,操作直接會有阻塞。
非同步就能很好地解決這個問題。通常我們實現非同步採用的方法是多執行緒。
顯而易見,這樣做的好處就在於操作之間不會互相堵塞。比如,你可以在窗體上放一個載入中的動畫,而另一個執行緒做一些耗時的工作。但由於其模型的特殊性,程式設計時可能會有一定難度,初學者一下子可能不好掌握。
當然,熟練之後,你就會發現非同步程式設計的好處。
補充一些:
在c#中,普通的非同步方法都以async結尾,通常含有非同步方法的物件中都會有響應的完成、進度改變和錯誤事件以供呼叫,只需繫結事件即可。
c# 5.0中引入了await和async兩個關鍵字,它們使得非同步變得跟簡單。
8樓:匿名使用者
同步就是要等待方法的返回,非同步就是方法執行過後立即返回,操作真正完成時會有事件發生
9樓:匿名使用者
你的問題是:程式設計同步通訊和程式設計上的非同步通訊吧?
php 同步程式設計和非同步程式設計的區別
深刻理解非同步和同步以及非同步程式設計有哪些方式
網路程式設計裡的同步和非同步有啥區別的?
10樓:匿名使用者
網路程式設計中,同步的意思是說,進行收發資料,等到資料真正傳送出去或者接受到,才返回;而非同步的意思是,可以把資料傳送到緩衝區立即返回,而傳送成功的訊息是通過事件通知的。非同步可以騰出更多的cpu來處理其他事情,所以非同步的方式比較靈活。 執行緒同步是指,多個執行緒協同完成一件工作,一個執行緒需要等待其他執行緒完成相關的工作,才能接著往下執行。
執行緒同步一般採用互斥體,訊號量,訊息等方式。
11樓:匿名使用者
同步就是:(1)執行緒之間可能進行通訊,一個執行緒需要等待另一個執行緒實現某種功能後,才能接著往下執行。這就需要執行緒等待。
(2)如果多個執行緒都有對某個資源的訪問許可權,並且每個執行緒都要獨佔地對資源進行訪問,那麼其他執行緒就需要等待,直到該程序釋放該資源。非同步:執行緒之間是獨立的,不需要相互通訊和對資源的共同訪問。
例如:主執行緒中呼叫子執行緒後,如果不需要子執行緒的返回值,就可以繼續往下執行,等執行時間片完畢後,子執行緒執行。這樣主執行緒和子執行緒交替執行,不存在等待的問題。
並不是非同步比同步功能更強大,這個要從各方面考慮,如多個執行緒對資源的共同訪問,就需要同步。建議看《windows核心程式設計》。講同步、非同步方面很好。
求eda用vhdl語言的程式設計,急急急!給高分!(要求完成一個具有非同步復位和同步使能功能的10進位制計數器)
12樓:霧中的陽光
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity shicount is
port(clk,reset,enable: in std_logic;
a,b,c,d,e,f,g: out std_logic;
tp : out std_logic_vector(0 to 3);
xian: out std_logic_vector(0 to 6);
count :out std_logic);
end shicount;
architecture xu of shicount is
signal temp :std_logic_vector(0 to 3);
signal xianshi:std_logic_vector(0 to 6);
begin
process(clk,reset,enable)
begin
if (reset='1')then temp<="0000";
elsif (enable='1') then
if (clk' event and clk='1')
then if (temp<="1000") then temp<=temp+1;
else temp<="0000";
end if;
end if;
end if;
end process;
process(temp)
begin
case temp is
when "0000"=> xianshi<="0000001";count<='0';
when "0001"=> xianshi<="0110000";count<='0';
when "0010"=> xianshi<="1101101";count<='0';
when "0011"=> xianshi<="1111001";count<='0';
when "0100"=> xianshi<="0110011";count<='0';
when "0101"=> xianshi<="1011011";count<='0';
when "0110"=> xianshi<="0011111";count<='0';
when "0111"=> xianshi<="1110000";count<='0';
when "1000"=> xianshi<="1111111";count<='0';
when "1001"=> xianshi<="1110011";count<='1';
when others=> xianshi<="0000000";count<='0';
end case;
end process;
a<=xianshi(6); b<=xianshi(5); c<=xianshi(4); d<=xianshi(3);
e<=xianshi(2);f<=xianshi(1); g<=xianshi(0); tp<=temp;
xian<=xianshi;
end xu;
c 11多執行緒還是linux系統函式嗎
雖然 thread 類的初始化可以提供這麼豐富和方便的形式,其實現的底層依然是建立一個 pthread 執行緒並執行之,有些實現甚至是直接呼叫 pthread create 來建立。建立一個執行緒之後,我們還需要考慮一個問題 該如何處理這個執行緒的結束?一種方式是等待這個執行緒結束,在一個合適的地方...
linux下c語言程式設計出現段錯誤
簡單看了一下你的程式 首先,你沒有給出完整的程式,這個讓大夥看起來確實不方便,因為沒有main函式,可能踩記憶體的地方並不是這個函式本身,是main函式 其次說你的這個函式,貌似確實有點問題,但是由於沒有完整的程式,我只說出我的理解,如果有錯,直接忽視就好 sprintf flag height,0...
C 在LINUX系統下用什麼軟體程式設計
呵呵,這個問題怎麼天天有人問啊。linux就是c c 根本不需要什麼軟體。在文字編緝器裡寫好了,直接在命令列下就可以編譯啦。在命令列下用 c 的話 g hello.cpp o helloc gcc hello.c o hello然後執行 hello 就可以了。我所有的程式都在qdevelop下面寫的...