কম্পিউটার টিউটোরিয়াল

C++-এ মাল্টিপল থ্রেডের মেমরি কনফ্লিক্ট ডিটেকশন

একটি র‍্যাম আছে যা ব্লকে বিভক্ত। একাধিক থ্রেড র‍্যাম এক্সেস করে। প্রতিটি অ্যাক্সেস: (Thread ID, Memory Block, Time, R/W)। মেমরি কনফ্লিক্ট হয় যখন:

  • একই সময়ে একাধিক রাইট অপারেশন একই ব্লকে।
  • রাইট অপারেশনের সময় t হলে, [t-5, t+5] রেঞ্জে অন্য থ্রেড সেই ব্লকে অ্যাক্সেস করলে (রিড বা রাইট) কনফ্লিক্ট।
  • শুধু রিড-রিড কনফ্লিক্ট নয়।

উদাহরণ

Accesses: (1,932,1,R), (2,512,2,W), (3,932,3,R), (4,512,4,R), (5,432,5,R), (6,512,6,R), (7,835,7,W), (8,432,8,R)

আউটপুট: Conflicting threads [2, 4] and [2, 6]

অ্যালগরিদম

  • অ্যাক্সেসগুলো মেমরি ব্লক অনুযায়ী সর্ট করুন, তারপর টাইম অনুযায়ী।
  • প্রতিটি অ্যাক্সেসের জন্য তার আগের ৫ টাইম ইউনিটের মধ্যে একই ব্লকে রাইট অপারেশন আছে কিনা চেক করুন।

C++ প্রোগ্রাম

#include <bits/stdc++.h>
using namespace std;

struct Thread {
    int id, memBlock, time;
    char op;
};

bool cmp(const Thread& a, const Thread& b) {
    if (a.memBlock != b.memBlock) return a.memBlock < b.memBlock;
    return a.time < b.time;
}

void detectConflicts(Thread arr[], int n) {
    sort(arr, arr+n, cmp);
    for (int i=1;i=0 && arr[j].memBlock==arr[i].memBlock && arr[i].time <= arr[j].time+5; j--) {
                    if (arr[i].op=='W' || arr[j].op=='W')
                        cout << "Conflicting threads [" << arr[j].id << ", " << arr[i].id << "]\n";
                }
            }
        }
    }
}

int main() {
    Thread th[] = {{1,932,1,'R'},{2,512,2,'W'},{3,932,3,'R'},{4,512,4,'R'},{5,432,5,'R'},{6,512,6,'R'},{7,835,7,'W'},{8,432,8,'R'}};
    detectConflicts(th, 8);
    return 0;
}

আউটপুট: Conflicting threads [2, 4] Conflicting threads [2, 6]

  1. সি++-এ ত্রিভুজের পেরিমিটার (Perimeter) বের করা

  2. C++-এ বাইনারি ট্রির সকল রাইট নোডের মধ্যে সর্বোচ্চ মান বের করুন

  3. C++-এ ডুপ্লিকেট সাবট্রি খুঁজে বের করা

  4. C++-এ মাল্টিপল ইনহেরিট্যান্স