[libvirt] [PATCH V11 2/7] Support for atomic operations on integers

Daniel Veillard veillard at redhat.com
Thu Apr 19 08:47:23 UTC 2012


On Tue, Apr 17, 2012 at 10:44:03AM -0400, Stefan Berger wrote:
> For threading support, add atomic add and sub operations working on
> integers. Base this on locking support provided by virMutex.
> 
> ---
>  src/util/viratomic.h |   91 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 91 insertions(+)
> 
> Index: libvirt-acl/src/util/viratomic.h
> ===================================================================
> --- /dev/null
> +++ libvirt-acl/src/util/viratomic.h
> @@ -0,0 +1,91 @@
> +/*
> + * viratomic.h: atomic integer operations
> + *
> + * Copyright (C) 2012 IBM Corporation
> + *
> + * Authors:
> + *     Stefan Berger <stefanb at linux.vnet.ibm.com>
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
> + *
> + */
> +
> +#ifndef __VIR_ATOMIC_H__
> +# define __VIR_ATOMIC_H__
> +
> +# include "threads.h"
> +
> +typedef struct _virAtomicInt virAtomicInt;
> +typedef virAtomicInt *virAtomicIntPtr;
> +
> +struct _virAtomicInt {
> +    virMutex lock;
> +    int value;
> +};
> +
> +static inline int
> +virAtomicIntInit(virAtomicIntPtr vaip)
> +{
> +    vaip->value = 0;
> +    return virMutexInit(&vaip->lock);
> +}
> +
> +static inline void
> +virAtomicIntSet(virAtomicIntPtr vaip, int value)
> +{
> +     virMutexLock(&vaip->lock);
> +
> +     vaip->value = value;
> +
> +     virMutexUnlock(&vaip->lock);
> +}
> +
> +static inline int
> +virAtomicIntRead(virAtomicIntPtr vaip)
> +{
> +     return vaip->value;
> +}
> +
> +static inline int
> +virAtomicIntAdd(virAtomicIntPtr vaip, int add)
> +{
> +    int ret;
> +
> +    virMutexLock(&vaip->lock);
> +
> +    vaip->value += add;
> +    ret = vaip->value;
> +
> +    virMutexUnlock(&vaip->lock);
> +
> +    return ret;
> +}
> +
> +static inline int
> +virAtomicIntSub(virAtomicIntPtr vaip, int sub)
> +{
> +    int ret;
> +
> +    virMutexLock(&vaip->lock);
> +
> +    vaip->value -= sub;
> +    ret = vaip->value;
> +
> +    virMutexUnlock(&vaip->lock);
> +
> +    return ret;
> +}
> +
> +#endif /* __VIR_ATOMIC_H */

  To be honnest, I'm not too fond of inline functions, but we already
rely on them (though for accessors mostly). In that case it's
reasonnable to use them,

  ACK, but it itches me a bit

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list