আমি সবেমাত্র একটি সিঙ্গলটন পদ্ধতি তৈরি করেছি এবং আমি ফাংশনটি কী করে তা জানতে চাই @synchronized()
, কারণ আমি প্রায়শই এটি ব্যবহার করি তবে এর অর্থ জানি না।
উত্তর:
এটি কোড ব্লকের চারপাশে একটি সমালোচনা বিভাগ ঘোষণা করে । মাল্টিথ্রেডেড কোডে, @synchronized
গ্যারান্টি দেয় যে কেবলমাত্র একটি থ্রেড কোনও নির্দিষ্ট সময়ে ব্লকটিতে সেই কোডটি কার্যকর করতে পারে।
এটি কী করে তা সম্পর্কে যদি আপনি অবগত না হন তবে আপনার অ্যাপ্লিকেশনটি সম্ভবত মাল্টিথ্রেড নয়, এবং আপনার সম্ভবত এটি ব্যবহার করার প্রয়োজন নেই (বিশেষত যদি সিঙ্গলটন নিজেই থ্রেড-নিরাপদ নয়)।
সম্পাদনা করুন: আরও কিছু তথ্য যুক্ত করা যা ২০১১ সাল থেকে মূল উত্তরে ছিল না।
@synchronized
নির্দেশ করে একটি দ্বারা সুরক্ষিত কোডের কোন অঞ্চল প্রবেশে একাধিক থ্রেড বাধা দেয় @synchronized
নির্দেশ একই বস্তুর উল্লেখ । @synchronized
নির্দেশটিতে পাস করা অবজেক্টটি সেই অবজেক্ট যা "লক" হিসাবে ব্যবহৃত হয়। দুটি থ্রেড কোডের একই সুরক্ষিত অঞ্চলে থাকতে পারে যদি আলাদা কোনও অবজেক্ট লক হিসাবে ব্যবহৃত হয় এবং আপনি লকের মতো একই অবজেক্টটি ব্যবহার করে কোডের দুটি সম্পূর্ণ ভিন্ন অঞ্চল রক্ষা করতে পারেন।
এছাড়াও, আপনি যদি nil
লক অবজেক্ট হিসাবে পাস হয়ে যান তবে কোনও লক নেওয়া হবে না।
@synchronized
।
অ্যাপল ডকুমেন্টেশন থেকে এখানে এবং এখানে :
@ সিঙ্ক্রোনাইজড নির্দেশিকা উদ্দেশ্য-সি কোডে ফ্লাইতে মিটেক্স লক তৈরি করার একটি সুবিধাজনক উপায়। @ সিনক্রোনাইজড নির্দেশনাটি অন্য যে কোনও মিটেক্স লকটি করবে তা করে — এটি একই সাথে একই থ্রোকে একই থ্রো থেকে প্রাপ্ত হওয়া থেকে বিভিন্ন থ্রেডকে বাধা দেয়।
ডকুমেন্টেশন এই বিষয়ে তথ্য প্রচুর সরবরাহ করে। এটি পড়ার জন্য এটি সময় দেওয়ার উপযুক্ত, বিশেষত আপনি এটি কী করছেন তা না জেনে এটি ব্যবহার করে চলেছেন।
@synchronized
ডিরেক্টিভের একটি সুবিধাজনক ভাবে উড়ে mutex কেশ তৈরি করা উদ্দেশ্য সি কোড।
দ্য @synchronized
ডিরেক্টিভের অন্য কোন mutex লক কি এটি হবে কি একই সময়ে একই লক অর্জন থেকে আলাদা থ্রেড বাধা দেয়।
বাক্য গঠন:
@synchronized(key)
{
// thread-safe code
}
উদাহরণ:
-(void)AppendExisting:(NSString*)val
{
@synchronized (oldValue) {
[oldValue stringByAppendingFormat:@"-%@",val];
}
}
এখন উপরের কোডটি পুরোপুরি থ্রেড নিরাপদ..এখন একাধিক থ্রেড মান পরিবর্তন করতে পারে।
উপরেরটি কেবল একটি অস্পষ্ট উদাহরণ ...
@synchronized(val, oldValue) { ... }
?
@ সিনক্রোনাইজড ব্লক আপনার জন্য স্বয়ংক্রিয়ভাবে লকিং এবং আনলকিং পরিচালনা করে । @ সিঙ্ক্রোনাইজ করুন আপনি সিঙ্ক্রোনাইজ করতে ব্যবহার করছেন এমন অবজেক্টের সাথে আপনার একটি অন্তর্নিহিত লক যুক্ত। এখানে এই বিষয়ে খুব তথ্যপূর্ণ আলোচনা এখানে দয়া করে অনুসরণ করুন @ সিঙ্ক্রোনাইজড লক / আনলকটি কীভাবে উদ্দেশ্য-সি-তে রয়েছে?
এখানে দুর্দান্ত উত্তর:
ক্লাস পদ্ধতিটি সিঙ্গলটনে ফিরে আসা বুঝতে সহায়তা করুন
একটি সিঙ্গলটন তৈরি করার প্রক্রিয়াটির আরও ব্যাখ্যা সহ।
@synchronized
হয় thread safe
প্রক্রিয়া। এই ফাংশনের অভ্যন্তরে লিখিত কোডের টুকরো অংশ হয়ে যায় critical section
, যেখানে একবারে কেবল একটি থ্রেড কার্যকর করা যায়।
@synchronize
লকটি NSLock
স্পষ্টভাবে প্রয়োগ করে যেখানে এটি সুস্পষ্টভাবে প্রযোজ্য।
এটি কেবল থ্রেড সুরক্ষার নিশ্চয়তা দেয়, এর গ্যারান্টি দেয় না। আমার অর্থ হ'ল আপনি নিজের গাড়ীর জন্য বিশেষজ্ঞ ড্রাইভার ভাড়া রাখেন, তবুও এটি কোনও দুর্ঘটনার মুখোমুখি হওয়ার গ্যারান্টি দেয় না। তবে সম্ভাবনা সামান্যতম থেকে যায়।
@synchronized
এটিতে শূন্য পয়েন্টার ব্যবহার করেন তবে কিছুই করেনা - আপনি অরক্ষিত হয়ে গেছেন। 2)@synchronized
হয় ধীর ।