<?xml version="1.0"?> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]> <refentry id="glib-programming"> <refmeta> <refentrytitle>Writing GLib Applications</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>GLib Library</refmiscinfo> </refmeta> <refnamediv> <refname>Writing GLib Applications</refname> <refpurpose> General considerations when programming with GLib </refpurpose> </refnamediv> <refsect1> <title>Writing GLib Applications</title> <refsect2> <title>Threads</title> <para> The general policy of GLib is that all functions are invisibly threadsafe with the exception of data structure manipulation functions, where, if you have two threads manipulating the <emphasis>same</emphasis> data structure, they must use a lock to synchronize their operation. </para> <para> GLib creates a worker thread for its own purposes so GLib applications will always have at least 2 threads. </para> <para> See the sections on <link linkend="glib-Threads">threads</link> and <link linkend="glib-Thread-Pools">threadpools</link> for GLib APIs that support multithreaded applications. </para> </refsect2> <refsect2> <title>Security</title> <para> When writing code that runs with elevated privileges, it is important to follow some basic rules of secure programming. David Wheeler has an excellent book on this topic, <ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/index.html">Secure Programming for Linux and Unix HOWTO</ulink>. </para> <para> When it comes to GLib and its associated libraries, GLib and GObject are generally fine to use in code that runs with elevated privileges; they don't load modules (executable code in shared objects) or run other programs 'behind your back'. GIO has to be used carefully in privileged programs, see the <ulink url="http://developer.gnome.org/gio/stable/ch02.html">GIO documentation</ulink> for details. </para> </refsect2> </refsect1> </refentry>