Ubuntu Online, Fedora Online, Windows online emulator അല്ലെങ്കിൽ MAC OS ഓൺലൈൻ എമുലേറ്റർ എന്നിങ്ങനെയുള്ള ഞങ്ങളുടെ ഒന്നിലധികം സൗജന്യ ഓൺലൈൻ വർക്ക്സ്റ്റേഷനുകളിലൊന്ന് ഉപയോഗിച്ച് OnWorks സൗജന്യ ഹോസ്റ്റിംഗ് പ്രൊവൈഡറിൽ പ്രവർത്തിപ്പിക്കാവുന്ന കമാൻഡ് rrdthreads ആണിത്.
പട്ടിക:
NAME
rrdthreads - മൾട്ടി-ത്രെഡഡ് പ്രോഗ്രാമുകളിൽ ഉപയോഗിക്കുന്നതിന് RRD ലൈബ്രറി ലിങ്ക് ചെയ്യുന്നതിനുള്ള വ്യവസ്ഥകൾ
സിനോപ്സിസ്
മൾട്ടി-ത്രെഡഡ് പ്രോഗ്രാമുകളിൽ librrd ഉപയോഗിക്കുന്നതിന് RRD പോലെ ചില അധിക മുൻകരുതലുകൾ ആവശ്യമാണ്
ലൈബ്രറി അതിന്റെ യഥാർത്ഥ രൂപത്തിൽ ത്രെഡ്-സേഫ് ആയിരുന്നില്ല. ഈ പ്രമാണം വിവരിക്കുന്നു
നിങ്ങളിലെ librrd-ന്റെ മൾട്ടി-ത്രെഡ് പതിപ്പ് ഉപയോഗിക്കുന്നതിനുള്ള ആവശ്യകതകളും അപകടങ്ങളും
സ്വന്തം പ്രോഗ്രാമുകൾ. ലൈബ്രറി ത്രെഡ് നിലനിർത്തുന്നതിന് ഭാവിയിലെ ആർആർഡി വികസനത്തിനായുള്ള സൂചനകളും ഇത് നൽകുന്നു-
സുരക്ഷിതം.
നിലവിൽ ചില RRD പ്രവർത്തനങ്ങൾ മാത്രമാണ് ത്രെഡ്-സേഫ് രീതിയിൽ നടപ്പിലാക്കുന്നത്. അവയെല്ലാം അവസാനിക്കുന്നു
സാധാരണ ""_r"" പ്രത്യയം.
വിവരണം
മൾട്ടി-ത്രെഡഡ് പ്രോഗ്രാമുകളിൽ librrd ഉപയോഗിക്കുന്നതിന് നിങ്ങൾ ഇനിപ്പറയുന്നവ ചെയ്യണം:
· ഇതുമായി ലിങ്ക് ചെയ്യുക librrd_th ഇതിനുപകരമായി librrd (ലിങ്ക് ചെയ്യുമ്പോൾ "-lrrd_th" ഉപയോഗിക്കുക)
സാധാരണ API ഫംഗ്ഷനുകൾക്ക് പകരം ""_r"" ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുക
· അറ്റ്-സ്റ്റൈൽ സമയ സ്പെസിഫിക്കേഷനുകളൊന്നും ഉപയോഗിക്കരുത്. അത്തരം സമയ സവിശേഷതകളുടെ പാഴ്സിംഗ് ആണ്
ഭയങ്കര നോൺ-ത്രെഡ്-സേഫ്.
*"_r" അല്ലാത്ത ഫംഗ്ഷനുകൾ ഒരിക്കലും ഉപയോഗിക്കരുത്, അത് ഫംഗ്ഷൻ ആണെന്ന് വ്യക്തമായി രേഖപ്പെടുത്തിയിട്ടില്ലെങ്കിൽ
ചവിട്ടി-സുരക്ഷിതം.
ഏതൊരു "librrd_th"-ലേക്കുള്ള ആദ്യ കോളിന് മുമ്പ് ഓരോ ത്രെഡും "rrd_get_context()" എന്ന് വിളിക്കണം
ത്രെഡ് നിർദ്ദിഷ്ട ഡാറ്റ സജ്ജീകരിക്കുന്നതിനുള്ള പ്രവർത്തനം. ഇത് കർശനമായി ആവശ്യമില്ല, പക്ഷേ
ഈ ഫംഗ്ഷൻ ഉപയോഗിച്ച് മെമ്മറി അലോക്കേഷൻ ചെയ്യാൻ കഴിയുമോ എന്ന് പരിശോധിക്കാനുള്ള ഒരേയൊരു മാർഗ്ഗമാണിത്.
അല്ലാത്തപക്ഷം, മെമ്മറി കുറഞ്ഞ സാഹചര്യത്തിൽ ഒരു SIGSEGV ഉപയോഗിച്ച് പ്രോഗ്രാം മരിക്കാനിടയുണ്ട്.
· ലൈബ്രറിയിലേക്കുള്ള ഏതൊരു കോളിനും മുമ്പായി എപ്പോഴും "rrd_error_clear()" എന്ന് വിളിക്കുക. അല്ലെങ്കിൽ വിളി
മുമ്പത്തെ ചില പിശകുകൾ കാരണം പരാജയപ്പെട്ടേക്കാം.
കുറിപ്പുകൾ വേണ്ടി DRR സംഭാവന ചെയ്യുന്നവർ
ഇപ്പോൾ മുതൽ RRD വികസിപ്പിക്കുമ്പോൾ ചില മുൻകരുതലുകൾ പാലിക്കേണ്ടതുണ്ട്:
· ലൈബ്രറി കോഡിൽ ത്രെഡ്-സേഫ് ഫംഗ്ഷനുകൾ മാത്രം ഉപയോഗിക്കുക. പലപ്പോഴും ഉപയോഗിക്കുന്ന പല libc ഫംഗ്ഷനുകളും അങ്ങനെയല്ല
ത്രെഡ്-സുരക്ഷിതം. ഇനിപ്പറയുന്ന സാഹചര്യങ്ങളിൽ അല്ലെങ്കിൽ ഇനിപ്പറയുന്ന ലൈബ്രറി ഉപയോഗിക്കുമ്പോൾ ശ്രദ്ധിക്കുക
പ്രവർത്തനങ്ങൾ:
· "strerror()" എന്നതിലേക്കുള്ള നേരിട്ടുള്ള കോളുകൾ ഒഴിവാക്കേണ്ടതാണ്: പകരം "rrd_strerror()" ഉപയോഗിക്കുക, അത്
ഒരു ത്രെഡ് പിശക് സന്ദേശം നൽകുന്നു.
· "getpw*", "getgr*", "Gethost*" ഫംഗ്ഷൻ ഫാമിലികൾ (കൂടാതെ മറ്റു ചിലത് "ഗെറ്റ്*"
ഫംഗ്ഷനുകൾ) ത്രെഡ്-സേഫ് അല്ല: *"_r" വേരിയന്റുകൾ ഉപയോഗിക്കുക
· സമയ പ്രവർത്തനങ്ങൾ: "asctime", "ctime", "gmtime", "localtime": *"_r" വകഭേദങ്ങൾ ഉപയോഗിക്കുക
· "strtok": "strtok_r" ഉപയോഗിക്കുക
· "tmpnam": "tmpnam_r" ഉപയോഗിക്കുക
· മറ്റു പലതും (ലുക്ക്അപ്പ് ഡോക്യുമെന്റേഷൻ)
· പേരുള്ള ഒരു തലക്കെട്ട് ഫയൽ rrd_is_thread_safe.h GNU-നൊപ്പം പ്രവർത്തിക്കുന്ന തരത്തിൽ നൽകിയിരിക്കുന്നു
C-preprocessor to "poison" എന്നതിലേക്കുള്ള ഏറ്റവും സാധാരണമായ ത്രെഡ്-സേഫ് ഫംഗ്ഷനുകളിൽ ചിലത്
"#പ്രാഗ്മ ജിസിസി വിഷം" നിർദ്ദേശം. നിങ്ങൾ ആഗ്രഹിക്കുന്ന ഉറവിട ഫയലുകളിൽ ഈ തലക്കെട്ട് ഉൾപ്പെടുത്തിയാൽ മതി
ത്രെഡ് സുരക്ഷിതമായി സൂക്ഷിക്കുക.
· ആഗോള വേരിയബിളുകൾ അവതരിപ്പിക്കരുത്!
നിങ്ങൾ ശരിക്കും ഒരു ഗ്ലോബൽ വേരിയബിൾ ഉപയോഗിക്കേണ്ടതുണ്ടെങ്കിൽ, നിങ്ങൾക്ക് ഒരു പുതിയ ഫീൽഡ് ചേർക്കാം
"rrd_context" ഘടനയും പരിഷ്ക്കരണവും rrd_error.c, rrd_thread_safe.c ഒപ്പം
rrd_non_thread_safe.c
· *"_r" ൽ "getopt" അല്ലെങ്കിൽ "getopt_long" ഉപയോഗിക്കരുത് (നേരിട്ടോ പരോക്ഷമായോ അല്ല).
"getopt" ഗ്ലോബൽ വേരിയബിളുകൾ ഉപയോഗിക്കുകയും ഒരു മൾട്ടി-ത്രെഡഡ് ആപ്ലിക്കേഷനിൽ മോശമായി പെരുമാറുകയും ചെയ്യുന്നു
ഒരേസമയം വിളിച്ചു. പകരം എല്ലാ ഓപ്ഷനുകളും ഫംഗ്ഷനായി എടുക്കുന്ന ഒരു *_r ഫംഗ്ഷൻ നൽകുക
പരാമീറ്ററുകൾ. വേരിയബിൾ ലെങ്ത് ആർഗ്യുമെന്റിനായി നിങ്ങൾക്ക് argc, **argv ആർഗ്യുമെന്റുകൾ നൽകാം
പട്ടികകൾ. ഉദാഹരണമായി "rrd_update_r" കാണുക.
· "rrd_parsetime" ഫംഗ്ഷൻ ഉപയോഗിക്കരുത്!
ഇത് ധാരാളം ആഗോള വേരിയബിളുകൾ ഉപയോഗിക്കുന്നു. രൂപകൽപ്പന ചെയ്തിട്ടില്ലാത്ത ഫംഗ്ഷനുകളിൽ നിങ്ങൾക്ക് ഇത് ഉപയോഗിക്കാം
ത്രെഡ്-സേഫ്, ചില പ്രവർത്തനങ്ങളുടെ "_r" പതിപ്പ് പൊതിയുന്ന ഫംഗ്ഷനുകളിലേതുപോലെ (ഉദാ,
"rrd_create", എന്നാൽ "rrd_create_r" ൽ അല്ല)
നിലവിൽ നടപ്പിലാക്കിയത് തേൻ SAFE പ്രവർത്തനങ്ങൾ
നിലവിൽ "rrd_update", "rrd_create", "rrd_dump" എന്നിവയുടെ ത്രെഡ്-സേഫ് വേരിയന്റുകൾ നിലവിലുണ്ട്.
"rrd_info", "rrd_last", "rrd_fetch".
onworks.net സേവനങ്ങൾ ഉപയോഗിച്ച് ഓൺലൈനായി rrdthreads ഉപയോഗിക്കുക