Beräkna summan av ett antal tal i en array med hjälp av trådar
Innehållsförteckning
- Introduktion till trådargument
- Implementera trådargument
- Dela upp arrayen och skapa trådar
- Beräkna halva summan för varje tråd
- Skicka tillbaka summan till huvudtråden
- Sammanfoga halvsummor i huvudtråden
- Använda dynamiskt allokerad minne för att skicka tillbaka värden
- Allokera och frigöra minne korrekt
- Andra alternativa lösningar för att beräkna summan
- Summering och avslutning
Implementera trådargument för att beräkna summan i en flertrådad miljö
I den här övningen ska vi undersöka hur man skickar argument till trådar och implementerar en flertrådad lösning för att beräkna summan av ett antal tal i en array. Istället för att använda tio trådar kommer vi att använda två trådar för att hålla det enkelt och överskådligt.
Introduktion till trådargument
Att skicka argument till trådar är ett sätt att kommunicera data till en tråd för att utföra en viss uppgift. Det är användbart när vi behöver dela upp en större uppgift i mindre delar som kan utföras parallellt i olika trådar. I vårt fall vill vi dela upp arrayen med primtal och beräkna halva summan i varje tråd.
Implementera trådargument
För att implementera trådargument behöver vi först ändra antalet trådar som vi använder. Istället för att ha tio trådar kommer vi bara använda två trådar i det här fallet. Vi behöver också behålla en lämplig låsning för att undvika race condition när vi skickar värden till trådarna. Vi behöver även anpassa våra indexvärden för att beräkna halva summan för varje tråd.
Dela upp arrayen och skapa trådar
För att dela upp arrayen i två delar och skapa trådar för varje del behöver vi definiera start- och slutindex för varje tråd. För den första tråden kommer vi att skicka startindexet för den första elementet i arrayen och för den andra tråden kommer vi att skicka startindexet för det sjätte elementet i arrayen.
Beräkna halva summan för varje tråd
För att beräkna halva summan för varje tråd använder vi en for-loop med lämpligt start- och slutindex. Vi summerar varje element i arrayen och sparar summan i en variabel för varje tråd.
Skicka tillbaka summan till huvudtråden
När tråden har beräknat halva summan måste vi skicka tillbaka värdet till huvudtråden. Vi kan använda dynamiskt allokerat minne för att skicka tillbaka värdet och se till att vi frigör minnet korrekt efter att det använts.
Sammanfoga halvsummor i huvudtråden
I huvudtråden måste vi sammanfoga de två halvsummor som skickats tillbaka av de två trådarna. Vi sparar varje halvsumma i en global variabel och lägger till dem tillsammans för att få den totala summan.
Använda dynamiskt allokerad minne för att skicka tillbaka värden
För att skicka tillbaka halvsumman till huvudtråden använder vi dynamiskt allokerat minne. Detta gör det möjligt för oss att skicka tillbaka värdet till huvudtråden och frigöra minnet i huvudtråden när det inte längre behövs.
Allokera och frigöra minne korrekt
För att undvika minnesläckage måste vi se till att vi allokerar och frigör minnet korrekt i varje tråd. Det är viktigt att använda samma antal free-anrop som antalet malloc- eller calloc-anrop.
Andra alternativa lösningar för att beräkna summan
Det finns andra sätt att implementera och lösa problemet med att beräkna summan av ett antal tal i en array. Vi har valt en lösning som använder trådargument och dynamiskt allokerat minne, men det finns också andra alternativ att utforska.
Summering och avslutning
I den här guiden har vi undersökt hur man implementerar trådargument och en flertrådad lösning för att beräkna summan av ett antal tal i en array. Vi har täckt olika steg och koncept som behövs för att göra detta och diskuterat andra möjliga lösningar. Med rätt bearbetning och användning av trådar kan vi effektivt beräkna summan parallellt och förbättra prestandan hos vårt program.
🧵