Lompat ke konten Lompat ke sidebar Lompat ke footer

getchar_unlocked() Bahasa C dan Fungsinya

getchar_unlocked() adalah sama seperti getchar() dengan exception dan tidak aman digunakan untuk thread. Perhatikan contoh kode program berikut ini.


Sebelum memahami lebih dalam materi tentang getchar_unlocked() Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Input Data Bahasa C menggunakan Scanf dan Fscanf, Input Buffer Bahasa C dan Fungsinya, dan Penggunaan fflush(stdin) Bahasa C dan Fungsinya.

Dalam pemrograman C, proses input dari pengguna atau file adalah bagian penting dari banyak program. Fungsi getchar_unlocked() adalah salah satu dari beberapa cara yang dapat digunakan untuk membaca karakter dari stdin (standar input) tanpa mengunci (unlock) input-output (I/O) yang berhubungan dengan karakter. Format umum penggunaannya adalah: int getchar_unlocked(void);

Contoh:

#include <stdio.h>


int main() {

char c;


while ((c = getchar_unlocked()) != EOF) 

{putchar(c);}


return 0;}

Berdasarkan contoh yang diperlihatkan sebelumnya, pengguna membaca karakter dari stdin menggunakan getchar_unlocked() dan kemudian mencetaknya kembali menggunakan putchar(). Proses ini akan terus berlanjut sampai akhir file (EOF) dicapai.

Penggunaan getchar_unlocked()

Fungsi getchar_unlocked() adalah varian dari fungsi getchar() yang lebih cepat dalam hal kinerja. Fungsi ini membaca karakter dari stdin, yaitu input standar dari pengguna, tanpa mengunci (locking) I/O. Ini membuatnya lebih cepat daripada getchar() karena tidak ada overhead yang terkait dengan mengunci atau membuka I/O.

Contoh:

// Program sederhana untuk

// mendemonstrasikan cara

// kerja dari

// getchar_unlocked() dalam

// bahasa C

#include <stdio.h>

 

int main()

{

// Sintak berikut memiliki

// kesamaan dengan getchar()

char c = getchar_unlocked();

 

printf("Karakter yang diinput"

" adalah %c", c);

 

return 0;

}

Input:
g

Output:
Karakter yang diinput adalah g

Baca Juga:

Perhatikan beberapa point penting berikut ini:
  • Karena tidak aman untuk thread, semua overhead pengecualian bersama dihindari dan lebih cepat daripada getchar().
  • Akan sangat berguna untuk pemrograman kompetitif dengan "Warning: Large I/O data, be careful with certain languages (though most should be OK if the algorithm is well designed".
  • Tidak terdapat isu dengan menggunakan getchar_unlocked() meskipun dalam lingkungan multithreaded selama thread yang digunakan dan hanya thread yang mengakses file object.
  • Perbedaan lainnya terhadap getchar(), dimana getchar_unlocked() bukan bagian dari library fungsi standar C, tetapi sebuah fungsi POSIX. Fungsi ini mungkin tidak akan bekerja pada kompilator berbasis Windows.
  • Merupakan fakta bahwa scanf() lebih cepat dari pada cin dan getchar() lebih cepat daripada scanf() secara umum. getchar_unlocked() lebih cepat daripada getchar(), sekaligus lebih cepat daripada semuanya.
  • Terdapat getc_unlocked(), putc_unlocked(), dan putchar_unlocked() merupakan versi non-thread-safe masing-masing dari getc(), putc(), dan putchar().

Contoh:

// Program sederhana untuk

// mendemonstrasikan cara

// kerja dari

// putchar_unlocked() dalam

// bahasa C

#include <stdio.h>

 

int main()

{

// Sintak bekerja sama seperti

// getchar()

char c = getchar_unlocked();

 

putchar_unlocked(c);

 

return 0;

}

Input:
g

Output:
g

Keuntungan penggunaan getchar_unlocked():
  • Kinerja yang Lebih Cepat: Salah satu keuntungan utama dari getchar_unlocked() adalah kinerjanya yang lebih cepat dibandingkan dengan getchar(). Karena tidak ada penguncian I/O yang terlibat, getchar_unlocked() dapat membaca karakter secara lebih efisien dalam skenario di mana kinerja kritis.
  • Tidak Ada Penguncian (Locking) I/O: Fungsi ini tidak mengunci I/O, yang berarti tidak ada overhead yang terkait dengan operasi penguncian atau pembukaan. Ini membuatnya lebih cepat dan efisien dalam situasi di mana banyak operasi I/O dilakukan.
  • Digunakan dalam Kode yang Diintensifkan Kinerjanya: getchar_unlocked() umumnya digunakan dalam kode yang membutuhkan kinerja tinggi, seperti dalam pembuatan pustaka (library) atau aplikasi yang memproses banyak karakter secara berurutan.
  • Skalabilitas yang Lebih Baik: Dalam skenario di mana program perlu mengolah input secara besar-besaran, getchar_unlocked() dapat memberikan keuntungan dalam hal skalabilitas. Karena kinerjanya yang lebih cepat, program dapat menangani volume input yang lebih besar dengan lebih efisien, menghasilkan kinerja yang lebih baik secara keseluruhan.
  • Kontrol Lebih Besar atas Operasi I/O: Dengan menghindari penguncian I/O yang terjadi dalam getchar(), pengguna memiliki lebih banyak kontrol atas operasi I/O dalam program. Ini dapat berguna dalam mengoptimalkan aliran program dan memastikan bahwa operasi I/O tidak menjadi bottleneck dalam kinerja aplikasi.
  • Peningkatan Kinerja pada Perangkat Terbatas: Untuk perangkat yang memiliki sumber daya terbatas, seperti perangkat berbasis mikrokontroler atau sistem tertanam (embedded systems), setiap siklus CPU dan setiap bit memori sangat berharga. Dalam kasus-kasus seperti ini, getchar_unlocked() dapat menjadi pilihan yang lebih baik untuk meningkatkan kinerja secara keseluruhan.
  • Pengolahan Input dalam Lingkungan Tertentu: Dalam beberapa kasus, terutama ketika program berjalan dalam lingkungan tertentu di mana kontrol atas I/O sangat penting, getchar_unlocked() dapat menjadi pilihan yang lebih disukai. Contohnya adalah dalam lingkungan real-time atau sistem yang sangat konkuren, di mana penguncian I/O dapat mengakibatkan penundaan yang tidak diinginkan.
  • Fleksibilitas dalam Pemrosesan Input Kustom: Penggunaan getchar_unlocked() memungkinkan programmer untuk menerapkan logika pemrosesan input yang lebih kustom. Dengan menghindari penguncian I/O yang terjadi dalam getchar(), programmer dapat lebih mudah mengontrol alur eksekusi program dan menerapkan logika khusus untuk kebutuhan aplikasi.

Keterbatasan penggunaan getchar_unlocked():
  • Tidak Aman: Salah satu keterbatasan dari getchar_unlocked() adalah bahwa fungsi ini tidak aman untuk digunakan dalam beberapa skenario. Karena tidak ada penguncian I/O, ini bisa menyebabkan masalah keamanan, terutama dalam lingkungan multiproses.
  • Tidak Portabel: getchar_unlocked() tidak sepenuhnya portabel di semua sistem atau platform. Ini dapat menyulitkan untuk menulis kode yang berjalan dengan benar di berbagai lingkungan.
  • Pembacaan Karakter Bersifat Blocking: Sama seperti getchar(), pemanggilan getchar_unlocked() bersifat blocking. Artinya, program akan menunggu sampai ada karakter yang tersedia untuk dibaca dari stdin.
  • Tidak Aman dalam Lingkungan Multiproses: Karena getchar_unlocked() tidak mengunci I/O, itu dapat menyebabkan masalah keamanan dalam lingkungan multiproses. Jika dua proses atau lebih berusaha untuk membaca dari stdin secara bersamaan, ini bisa menyebabkan kondisi lomba (race conditions) dan menghasilkan hasil yang tidak terduga atau tidak konsisten.
  • Kompatibilitas Terbatas: Fungsi getchar_unlocked() mungkin tidak didukung oleh semua sistem atau platform. Ini membuatnya kurang portabel daripada getchar(), yang lebih umum didukung di berbagai lingkungan pengembangan.
  • Membutuhkan Pemahaman yang Lebih Mendalam: Penggunaan getchar_unlocked() memerlukan pemahaman yang lebih mendalam tentang bagaimana I/O bekerja di tingkat yang lebih rendah dalam sistem. Programmer harus memahami implikasi dari tidak mengunci I/O dan menangani dengan benar situasi-situasi yang berkaitan dengan akses bersamaan terhadap stdin.
  • Membutuhkan Kode Tambahan untuk Penanganan Kesalahan: Karena getchar_unlocked() tidak secara otomatis menangani kondisi kesalahan seperti getchar(), programmer perlu menambahkan kode tambahan untuk menangani kondisi-kondisi ini dengan benar. Ini dapat meningkatkan kompleksitas kode dan memerlukan lebih banyak upaya dalam pengembangan dan pemeliharaan.
  • Kesulitan dalam Pemecahan Masalah: Karena penggunaan getchar_unlocked() memerlukan pemahaman yang lebih mendalam tentang operasi I/O pada tingkat yang lebih rendah, debug dan pemecahan masalah kode yang menggunakan fungsi ini dapat menjadi lebih sulit. Masalah terkait dengan kesalahan akses bersamaan atau masalah kinerja mungkin lebih sulit untuk diidentifikasi dan diperbaiki.
  • Potensi untuk Kesalahan Pengguna: Seperti getchar(), penggunaan getchar_unlocked() juga rentan terhadap kesalahan pengguna dalam memproses karakter input. Misalnya, jika programmer tidak memvalidasi masukan dengan benar, ini dapat menyebabkan masalah keamanan atau kesalahan logika dalam program.

Dalam pengembangan perangkat lunak, penggunaan getchar_unlocked() harus dipertimbangkan dengan hati-hati, dengan memperhitungkan keuntungan dan keterbatasannya. Meskipun kinerjanya lebih cepat, penggunaan fungsi ini harus dipertimbangkan dengan baik, terutama dalam hal keamanan dan portabilitas kode. Saat digunakan secara bijaksana, getchar_unlocked() dapat meningkatkan kinerja dan efisiensi program C.

5 komentar untuk "getchar_unlocked() Bahasa C dan Fungsinya"

  1. Apa yang dimaksud dengan getchar_unlocked() pada bahasa C?

    BalasHapus
    Balasan
    1. getchar_unlocked() adalah mirip dengan getchar() pada bahasa C, dengna pengecualian bahwa penggunaan dari fungsi tersebut tidak aman jika digunakan untuk thread.

      Karena bukan merupakan suatu fungsi yang aman untuk thread, maka semua overhead timbal balik pengecualian akan dihindari dan prosesnya akan lebih cepat daripada getchar().

      Hapus
  2. Apa perbedaan antara getchar_unlocked() dan getchar() pada bahasa C?

    BalasHapus
    Balasan
    1. perbedaan antara getchar_unlocked() dan getchar() adalah fungsi getchar_unlocked() bukan bagian dari library standar C, melainkan bagian dari fungsi POSIX, sehingga hal ini dapat mengakibatkan fungsi tersebut tidak dapat bekerja pada kompilator berbasis windows.

      Hapus
    2. getchar_unlocked() bekerja lebih cepat daripada getchar(), dan merupakan yang paling cepat diantara fungsi input lainnya dalam bahasa C (seperti scanf()).

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -