Multithreading: Forskelle mellem versioner

Fra Wikipedia, den frie encyklopædi
Content deleted Content added
Isfisk (diskussion | bidrag)
wiki
+ de
Linje 40: Linje 40:
[[C (programmeringssprog)|C]] (gennem bl.a. [[POSIX]])
[[C (programmeringssprog)|C]] (gennem bl.a. [[POSIX]])


[[C plus plus (programmeringssprog)|C++]] som C.
[[C plus plus (programmeringssprog)|C++]] som C.


[[Objective-C]] (POSIX, [[Cocoa]])
[[Objective-C]] (POSIX, [[Cocoa]])
Linje 57: Linje 57:
[[Microsoft]] [[Windows 95]], [[Windows 98]], [[Windows NT]], [[Windows 2000]], [[Windows XP]], [[Windows 2003]]
[[Microsoft]] [[Windows 95]], [[Windows 98]], [[Windows NT]], [[Windows 2000]], [[Windows XP]], [[Windows 2003]]


[[Open source]]: [[Linux]], [[FreeBSD]], [[NetBSD]], [[OpenBSD]] og andre
[[Open source]]: [[Linux]], [[FreeBSD]], [[NetBSD]], [[OpenBSD]] og andre


[[Sun Microsystems]]: [[Solaris]]
[[Sun Microsystems]]: [[Solaris]]
Linje 63: Linje 63:
[[Kategori: Datalogi]]
[[Kategori: Datalogi]]
[[Kategori: Programmeringssprog]]
[[Kategori: Programmeringssprog]]

[[de:Multithreading]]

Versionen fra 20. maj 2005, 17:54

Multithreading er en måde at distribuere opgaver i programmer mellem flere, alenestående men samarbejdende tråde i programmet, og adskiller sig fra multiproces-programmer ved, at der ikke anvendes flere instanser af samme program samtidig, med dertil hørende interproceskommunikation, men at al håndtering af koordination og kommunikation foregår inde i selve programmet, samt at programmerne nemt og elegant kan anvende samtlige globale variable.

Anvendelse af multithreading

Da tråde elegant kan distribueres over flere processorer, kan maksimal ydeevne for multiprocessor-systemer nåes ved enkel og effektiv anvendelse af multithreading, uden det store overhead multiproces-programmer skaber hos operativsystemet.

Eksempel

Et enkelt eksempel på multithreading, skrevet i Cocoa:

multithread.m

 #import <Cocoa/Cocoa.h>
 @interface Multithread : NSObject {
 }
 - (void) sigHejToGange;
 - (void) hejThread;
 @end
 
@implementation Multithread
 - (void) sigHejToGange {
    NSLog(@"Hej, verden");
    [NSThread detachThreadSelector: @selector( hejThread) toTarget: self withObject: NIL];
 }
 
 - (void) hejThread {
   NSLog(@"Hej, verden");
 }
 @end
 
 int main() {
   Multithread * test = [[Multithread alloc] init];
   [test sigHejToGange];
   [test release]
 }

Programmet udskriver "Hej, verden" to gange - i to forskellige threads.

Synkronisering mellem tråde

Synkronisering kan ske med mutexes og spinlocks, eller ved hjælp af primitive kontrolvariable, og et simpelt if-udsagn.

Programmeringssprog, som understøtter tråde

C (gennem bl.a. POSIX)

C++ som C.

Objective-C (POSIX, Cocoa)

Ruby, indbygget

Perl, indbygget

Python, indbygget

Java, indbygget

Operativsystemer, som understøtter tråde

Apple: Mac OS X

Microsoft Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows 2003

Open source: Linux, FreeBSD, NetBSD, OpenBSD og andre

Sun Microsystems: Solaris